您應該加載列表做一個異步任務。在替換當前片段之前,只需取消異步任務。如果任務沒有被取消,請確保您檢查onPostExecute。
在這裏您可以找到將異步數據加載到回收站視圖的示例:http://javatechig.com/android/android-recyclerview-example。看看AsyncHttpTask。您可以看到數據在doInBackground上進行採集和分析,並顯示在onPostExecute中。您還需要將以下內容添加到您的代碼:關於分離的
if (!isCancelled()) {
/* your code here for setting list adapter */
}
覆蓋在onPostExecute附上一切:
@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