0
當以下異步方法更新我的主頁時,我目前正在收到java.lang.IllegalStateException: Fragment HomeFragment{b862cf1} not attached to Activity
錯誤。異步任務更新UI
new AsyncTask<HomeCardHolder, Void, List<HomeCardModel>>() {
HomeCardHolder mHomeCardHolder;
@Override
protected List<HomeCardModel> doInBackground(HomeCardHolder... params) {
if (params != null && params.length > 0) {
mHomeCardHolder = params[0];
}
return getPunchCardDeals();
}
@Override
protected void onPostExecute(List<HomeCardModel> punchCard) {
if (isActivityAlive() && !ListUtils.isEmpty(punchCard) && mHomeCardHolder != null) {
mCardAdapter.refreshDataForCards(mHomeCardHolder.getSectionName(), punchCard);
}
}
}.execute(homeCardHolder);
事情是getPunchCardDeals()
檢索交易列表,但也更新UI元素。我讀過UI元素不能在後臺線程上更新,那麼這裏的適當結構是什麼?
感謝, Otterman
編輯: 如果添加片段我檢查。
boolean isActivityAlive() {
return null != getActivity() && isAdded() && !getActivity().isFinishing();
}
只能檢索doInBackground中的列表/數據等,並在postExecute中完成所有與UI相關的工作。 –
請給出一個完整的代碼示例。您應該包含封裝這裏顯示的代碼行的類和方法。同時顯示您創建HomeFragment的位置。 –
doInbackground應該做檢索和處理,onPostExecute應該做顯示。如果您有一個您定期顯示的UI(例如獲取100個項目,顯示,然後獲取下一個100項目),則可以使用publishProgress並更新進度更新中的UI。請注意,它將與doInBackground並行執行,因此不要在沒有正確鎖定的情況下從其下更新任何數據結構。 –