2015-01-19 3 views
0

В моем приложении он запускает фрагмент в методе onCreate, который я асинхронно вызываю вызов веб-службы, для возврата данных требуется около 2 секунд. Но к тому времени фрагмент уже завершил загрузку. В результате на экране нет данных.Загрузка фрагментов перед возвратом данных

Я попытался сбросить поток на 2 секунды, но это тоже не сработало.

ответ

1

Когда асинхронный вызов завершен, он должен вызывать метод на фрагменте. Вы можете добиться этого, передав фрагмент асинхронному вызову и используя метод обратного вызова.

Например, предположим, что вы используете AsyncTask:

public class MyFragment extends Fragment { 

    public void onCreate(Bundle b) { 
     new MyAsyncTask(this).execute(params); 
    } 

    public void updateResult(Result r) { 
     // update the views here 
    } 

} 


public MyAsyncTask extends AsyncTask<...> { 

    private final MyFragment fragment; 

    public MyAsyncTask(MyFragment fragment) { 
     this.fragment = fragment; 
    } 

    ... 

    @Override 
    protected void onPostExecute(Result result) { 
     fragment.updateResult(result); 
    } 
} 

Таким образом, фрагмент может загрузить до готовности данных. Затем данные могут быть заполнены, когда они будут получены.

В зависимости от вашего дизайна вы можете захотеть, чтобы анимация анимации по умолчанию отображалась по умолчанию в вашем фрагменте, а затем спрятала ее, когда вы делаете данные видимыми в обратном вызове.

+0

Что такое yo mean by ?, передавая фрагмент асинхронному вызову и имея метод обратного вызова. " –