异步任务更新UI

时间:2017-02-24 18:15:36

标签: android android-asynctask

当以下异步方法更新我的主页时,我当前收到java.lang.IllegalStateException: Fragment HomeFragment{b862cf1} not attached to Activity错误。

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();

}

1 个答案:

答案 0 :(得分:0)

在更新视图时,应确保片段随活动一起添加。为此,您应该使用fragment.isAdded()。 所以更换

if (isActivityAlive() && !ListUtils.isEmpty(punchCard) && mHomeCardHolder != null)

if (isAdded()&&isActivityAlive() && !ListUtils.isEmpty(punchCard) && mHomeCardHolder != null)

可以帮到你。