Вы должны сделать задачу Async для загрузки списка. Перед заменой текущего фрагмента просто отмените задачу async. Убедитесь, что вы выполнили проверку onPostExecute, если задача не отменена.
Здесь вы можете найти пример загрузки данных async в вид ресайклера: http://javatechig.com/android/android-recyclerview-example. Посмотрите на AsyncHttpTask. Вы можете видеть, что данные берутся и анализируются на doInBackground и отображаются в onPostExecute. Кроме того, необходимо добавить следующее в ваш код: вложить все в onPostExecute в
if (!isCancelled()) {
/* your code here for setting list adapter */
}
переопределение на Detach:
@Override
public void onDetach() {
super.onDetach();
// don't update the UI if user go from this fragment
if (displayResultsAsyncTask != null && !displayResultsAsyncTask.isCancelled())
displayResultsAsyncTask.cancel(true);
}
Так что ваш код должен выглядеть примерно так:
public class YourFragment extends Fragment {
// declare an async task in your fragment
private AsyncTask displayResultsAsyncTask = null;
/* other data here */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
/* your code for onCreate */
GetAndDisplayResults(); // call display results
}
public void GetAndDisplayResults() {
displayResultsAsyncTask = new AsyncTask<String, Void, Integer>() {
@Override
protected Integer doInBackground(String... params) {
Integer result = 0;
// get and parse data, also set result
return result;
}
@Override
protected void onPostExecute(Integer result) {
if (!isCancelled()) {
// if task wasn't stopped
if (result == 1)
SetYourList(); // set your list adapter based on results returned from doInBackground
}
}
}.execute();
}
@Override
public void onDetach() {
super.onDetach();
// don't update the UI if user go from this fragment
if (displayResultsAsyncTask != null && !displayResultsAsyncTask.isCancelled())
displayResultsAsyncTask.cancel(true);
}
}
Список, используемый для сохранения ваших данных, может быть объявлен глобальным и доступен как от doInBackground, так и от onPostExecute или может быть поставлен на onPostExecute в качестве параметра.
вставьте свой вывод logcat –
Если сбой приложения, вы не должны публиковать свою ошибку logcat. Без этого мы можем только рассуждать о причине. – Rohit5k2