OnLoadFinished()调用两次

我试图弄清楚我是否在装载机方面做错了什么。 我使用的支持库,我有一个在onCreate()调用initLoader()设置自己作为LoaderCallbacks的片段,但是,在旋转它在onLoadFinished()接收结果两次,一次调用init (并且它已经有了数据),并且一次由于FragmentActivity在onStart()中循环遍历所有的Loader,并且由于它已经有了数据而传递结果。

如果我只调用一次init(在第一次启动Fragment时),它不会将自己设置为Loader的callback函数,因此根本不会收到对onLoadFinished的调用。 似乎onLoadFinished应该只被调用一次,因为一些昂贵的事情可能会在onLoadFinished()(如清单适配器等),所以我只是想弄清楚这是一个错误,或者如果我只是在错误的时间调用init或其他东西。

任何人都有这个问题的任何见解?

Solutions Collecting From Web of "OnLoadFinished()调用两次"

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

 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); } ... } 

这解决了我的问题在屏幕上旋转加载器被触发两次。 还有一点需要注意的是,这仅仅是我testing的Android <6上需要的。 Android 6似乎根本没有这个问题。

我自己遇到同样的问题,没有好的解决办法。 这似乎是在Android框架中的错误,这里是类似的线程,其中提出的解决scheme是将initLoader()放在onResume() – 我已经尝试过,它的工作原理onLoadFinished()只被调用一次: Android:LoaderCallbacks.OnLoadFinished调用两次

我有一个类似的问题,原因是我的代码中有initLoaderrestartLoader 。 根据用户的操作,我的查询可能会改变,所以我需要重新启动我的加载程序。

解决方法是只使用restartLoader ,即使在onResumecallback方法initLoader restartLoaderreplacerestartLoader

在Android上看到我的post:LoaderCallbacks.OnLoadFinished调用两次

在ViewPager中重新启动碎片时,我遇到了类似的问题。 我的解决scheme是通过调用完成后(在onLoadFinished结束时)删除Loader

 getLoaderManager().destroyLoader(LOADER_ID); 

希望能帮助到你!