gpt4 book ai didi

android - 何时在 Fragment 中调用 initLoader?

转载 作者:IT老高 更新时间:2023-10-28 23:25:13 31 4
gpt4 key购买 nike

我有一个非常简单的带有 ListView、CursorLoader 和 CursorAdapter 的 Fragment。一切都在单个 Activity 中(只是切换 fragment )。我的问题是 onLoadFinished() 在某些情况下会根据我调用 initLoader() 的位置被调用两次。这些情况是:

  • 配置更改(旋转屏幕等)
  • 使用 FragmentTransaction 将当前 fragment 替换为另一个 fragment ,然后返回(弹出回栈)。在这种情况下,一个列表项的详细信息 fragment 。

当 initLoader() 放入 onCreateView() 时,onActivityCreated()(文档中推荐) onLoadFinished() 在配置更改后被调用两次。 Rudik Krasniynos 解释了原因.但是 onLoadFinished() 在从 backstack 中弹出较新的 fragment 时只调用一次。

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

所以问题是在哪里或如何在不调用 onLoadFinished() 两次的情况下初始化 Loader,或者检查什么以不两次初始化 Loader。谢谢!

替换 fragment 代码:

FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.root_view, fragment, tag);
ft.addToBackStack(null);
ft.commit();

CursorAdapter 的代码:

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

我正在使用支持库 v18。

最佳答案

为了避免 onLoadFinished 被多次调用,在 onResume 中初始化你的加载器。

关于android - 何时在 Fragment 中调用 initLoader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727414/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com