【问题标题】:Custom AsyncTaskLoader, loadinBackground not called after 5 attempts自定义 AsyncTaskLoader,5 次尝试后未调用 loadinBackground
【发布时间】:2013-01-25 21:51:00
【问题描述】:

我有一个SherlockListFragment,它实现了一个自定义AsyncTaskLoader。 在被覆盖的onStartLoading() 中,我有:

@Override
protected void onStartLoading() {
  if (mData != null) {
    deliverResult(mData);
  }
  else{
    forceLoad();
  }
}

包含SherlockListFragmentonActivityCreated 中启动加载器:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);
  mAdapter = new MyListAdapter(getActivity());
  setListAdapter(mAdapter);
  getLoaderManager().initLoader(0, null, this);
}

和:

@Override
public Loader<List<MyData>> onCreateLoader(int id, Bundle args) {
  return new MyListLoader(getActivity());
}

问题是在我的 FragmentActivity 5 次激活/导航后,loadinBackground() 没有被调用。 onStartLodingforceLoad 都被调用,但仅此而已。 没有例外,LogCat 中没有任何内容。

有什么想法吗?

【问题讨论】:

  • 在哪里/如何触发 Activity 中的加载器?
  • 你解决过这个问题吗?有一个非常相似的问题。
  • 这个问题解决了吗?我在我的项目中遇到了同样的问题。
  • 致那些询问的人;不,我不记得这个问题解决了,抱歉。在那个项目中,我放弃了 Sherlock 组件,转而使用 v7 应用兼容库。在那个过程中,很多东西都被重写了,我再也没有遇到过这个问题。

标签: android asynctaskloader


【解决方案1】:

可以调用forceLoad()

查看says 的哪些文档:
您通常应该只在加载程序启动时调用它 - 即 isStarted() 返回 true。

完整代码:

@Override
protected void onStartLoading() {
    try {
        if (data != null) {
            deliverResult(data);
        }
        if (takeContentChanged() || data == null) {
            forceLoad();
        }

        Log.d(TAG, "onStartLoading() ");
    } catch (Exception e) {
        Log.d(TAG, e.getMessage());
    }
}

重要提示:

documentation saysLoader&lt;D&gt; 的子类通常必须至少实现onStartLoading()、onStopLoading()、onForceLoad() 和onReset() p>

AsyncTaskLoader 扩展了 Loader,但没有实现 onStartLoading()、onStopLoading()、onReset()。必须自己实现!


附:在使用过简单的 CursorLoader 之后,我对它感到困惑,我还认为使用 forceLoad() 是不好的做法。但事实并非如此。

【讨论】:

  • 你拯救了我的一天!没错,即使不需要,也必须实现“onStartLoading()”。在我的自定义 AsyncTaskLoader 中实现它解决了我的问题。谢谢!
  • 不推荐使用 AsycnTask,我尝试了 AsyncTaskLoader 并且似乎令人难以置信,您需要执行这些不清楚的技巧才能使其正常工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多