Custom Loader - 从backstack返回片段时调用onStartLoading()

时间:2013-03-25 21:48:38

标签: android android-listfragment android-loadermanager android-loader asynctaskloader

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

但是,在导航到另一个活动并返回时,Loader Managers调用加载器的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兼容性库。

谢谢!

1 个答案:

答案 0 :(得分:0)

要检查的一小部分提示......当您initLoader时,它可能无法拨打onStartLoading,但肯定会致电onLoadFinished(并提供旧结果)。

也许这发生在你身上?

还尝试阅读此主题: Why is onLoadFinished called again after fragment resumed?