0

我使用 ViewPager 和 FragmentStatePageAdapter 显示搜索结果,每组结果都在自己的片段中。使用自定义 AsyncTaskLoader 加载数据。我想在进入其他活动/背景并返回时保留滚动位置。

然而,在导航到另一个活动并返回时,加载器管理器调用加载器的 onStartLoading() 并不必要地重新加载数据:

protected void onStartLoading() {
    if (results.size() > 0) {
        Log.d(TAG, "onStartLoading() - deliver result");
        deliverResult(mResults);
    }

    if (takeContentChanged() || results.size() == 0) {
        Log.d(TAG, "onStartLoading() - force load");
        // Needed for custom loaders
        forceLoad();
    }

 // Register observer...

}

这也意味着我无法恢复滚动位置(保存在片段的保存时)。有什么方法可以避免在片段的 onResume 上重新加载?我只在 onActivityCreated() 中调用 initLoader(),当从 backstack 中恢复片段时不会调用它。

我正在使用 v4 兼容性库。

谢谢!

4

1 回答 1

0

一个小提示检查......当你initLoader可能不会打电话onStartLoading但它肯定会打电话onLoadFinished(并提供旧结果)。

也许这正在发生在你身上?

还可以尝试阅读此线程: 为什么在片段恢复后再次调用 onLoadFinished?

于 2017-07-26T06:38:21.650 回答