首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OnLoadFinished()调用了两次

OnLoadFinished()调用了两次
EN

Stack Overflow用户
提问于 2013-02-06 08:59:20
回答 4查看 8K关注 0票数 21

我在试着找出我是不是在Loaders方面做错了什么。我使用的是支持库,并且我有一个片段,它在onCreate()中调用initLoader()并将自身设置为LoaderCallbacks,但是它在onLoadFinished()中循环接收两次结果,一次是调用init (并且它已经拥有数据)的结果,另一次是FragmentActivity循环遍历onStart()中的所有Loader并传递结果的结果,因为它已经拥有数据。

如果我只调用一次init (在第一次启动片段时),它不会将自身设置为Loader的回调函数,因此它根本不会接收到对onLoadFinished的调用。似乎onLoadFinished应该只调用一次,因为一些开销很大的事情可能会在onLoadFinished()中完成(比如清除列表适配器等),所以我只是想弄清楚这是不是一个bug,或者我只是在错误的时间或其他什么地方调用了init。

有人对这个问题有什么见解吗?

EN

回答 4

Stack Overflow用户

发布于 2015-05-28 13:55:37

我遇到了类似的问题,原因是我的代码中包含了initLoaderrestartLoader。根据用户的操作,我的查询可能会改变,所以我需要重新启动我的加载器。

解决方案是只使用restartLoader,即使在onResume回调方法中也是如此,用restartLoader替换initLoader

票数 3
EN

Stack Overflow用户

发布于 2015-11-30 05:41:29

这是一个相当古老的问题,但对于未来的读者,我有一个替代的解决方案。基本上,我最终所做的就是重新启动加载程序。

代码语言:javascript
复制
public void onActivityCreated(Bundle savedInstanceState) {
...
       if(getLoaderManager().getLoader(Constants.LOADER_ID) == null) {
            getLoaderManager().initLoader(Constants.LOADER_ID, null, this);
        } else {
            getLoaderManager().restartLoader(Constants.LOADER_ID, null, this);
        }

...
}

这解决了我的问题,在屏幕上旋转加载程序被触发两次。还有一件事需要注意的是,我只需要在我测试的Android <6上使用它。Android 6似乎完全没有这个问题。

票数 3
EN

Stack Overflow用户

发布于 2013-02-14 18:25:51

我自己也遇到了同样的问题,没有好的解决方案。这似乎是安卓框架中的bug,这里有一个类似的线程,提出的解决方案是将initLoader()放在onResume()中-我试过了,它起作用了,在onLoadFinished()上只被调用一次:Android: LoaderCallbacks.OnLoadFinished called twice

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14719814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档