相关疑难解决方法(0)

Android:LoaderCallbacks.OnLoadFinished两次调用

我注意到使用Android Loaders和Fragments的奇怪情况.当我调整方向更改onLoadFinished后调用LoaderManager.initLoader()时(尽管文档建议我应该为此做好准备),但在此之后调用它两次.以下链接指向相同情况的Google群组中的帖子https://groups.google.com/forum/?fromgroups#!topic/android-developers/aA2vHYxSskU.我编写了示例应用程序,其中我只在Fragment.onActivityCreated()中初始化简单的Loader来检查是否会发生这种情况.有人注意到了吗?

android loader

53
推荐指数
4
解决办法
2万
查看次数

OnLoadFinished()调用两次

我想弄清楚我是否在装载机方面做错了.我正在使用支持库,我有一个片段,在onCreate()中调用initLoader()将其自身设置为LoaderCallbacks,但是在旋转时它会在onLoadFinished()中接收两次结果,一次调用init (并且它已经拥有数据),并且一旦FragmentActivity循环遍历onStart()中的所有Loaders并提供结果,因为它已经拥有数据.

如果我只调用init一次(在首次启动Fragment时),它不会将自己设置为Loader的回调,因此它根本不会接收对onLoadFinished的调用.好像onLoadFinished应该只被调用一次,因为onLoadFinished()可以完成一些昂贵的事情(例如清除列表适配器等),所以我只想弄清楚这是一个bug还是我是只是在错误的时间或其他地方调用init.

任何人都对此问题有任何见解?

android loader android-fragments android-loadermanager android-fragmentactivity

20
推荐指数
1
解决办法
7588
查看次数

在Fragment中调用initLoader时?

我有一个非常简单的片段与ListView,CursorLoader和CursorAdapter.一切都在单一活动中(只是切换片段).我的问题是onLoadFinished()在某些情况下根据我调用initLoader()的位置被调用两次.那些情况是:

  • 配置更改(旋转屏幕等)
  • 使用FragmentTransaction将当前片段替换为另一个片段,然后返回(弹出backstack).在这种情况下,一个列表项的细节片段.

当initLoader()放入onCreateView()时,onAoseCreated()(在文档中推荐)onLoadFinished()在配置更改后被调用两次.有解释为什么Rudik Krasniynos.但是当从backstack弹出更新的片段时,onLoadFinished()只被调用一次.

当initLoader()放在onResume()/ onStart()方法中时,上面的情况相反.两次调用onLoadFinished()用于弹出backstack,另一次用于配置更改.

所以问题是在没有调用onLoadFinished()两次的情况下初始化Loader的地方或方法,或者检查两次不是init Loader的内容.谢谢!

替换片段的代码:

FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.root_view, fragment, tag);
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

CursorAdapter的代码:

//onCreateView
MyCursorAdapter mAdapter = new MyCursorAdapter(getActivity(), null, 0);
mList.setAdapter(mAdapter);
//in other/same lifecycle callbacks
getLoaderManager().initLoader(ID, null, this);
Run Code Online (Sandbox Code Playgroud)

我正在使用支持库v18.

android android-fragments

17
推荐指数
1
解决办法
3583
查看次数