【问题标题】:Restart Loader from other Fragment从其他 Fragment 重启 Loader
【发布时间】:2012-08-28 10:41:04
【问题描述】:

我有一个 ViewPager,里面有 3 个片段。每个 Fragment 使用 AsyncTaskLoader 从数据库中获取数据。现在我想从 Fragment C 重新启动 Fragment A 的加载器,但是如果我调用

getLoaderManager.getLoader( "LOADER_A_ID" )

结果为空。 我读到每个 LoaderManager 都有一个 Activity/Fragment,每个 Fragment 都有一个自己的 LoaderManager。 有没有好主意来解决我的问题?

我会实现一个 GlobalLoaderManager,它是一个单例模式并保存片段。 ViewPager 重用了他的 Fragments,所以我在这个 Manager 中只有一个 Pager Fragment 的实例。

【问题讨论】:

  • 为什么你需要重新启动一个片段的加载器,而这个片段在另一个片段中甚至不可见?您可以实现一个回调并让活动重新启动加载程序。
  • 每个片段显示单独的数据,但它们在 db 模型底部连接。例如:片段 A 显示带有可烹饪状态的食谱,片段 B 显示带有数量的成分。现在我改变了一种成分的用量,并想告诉 Fragment A 重新加载他的食谱以刷新可烹饪状态。
  • 我认为,一个选项是在ViewPageronPageSelected 上设置OnPageChangeListener,您将使用该位置(如果页面位置正确(如第一个片段))+一个布尔标志。布尔标志(来自活动)将由修改数据的片段设置(当发生这种情况时)。然后在onPageSelected 中,您将使用FragmentManager 来获取该页面的FragmentgetSupportFragmentManager().findFragmentByTag("android:"+R.id.viewpager_id+":"+position);。然后调用一个方法来重启那个Fragment中的加载器。
  • 听起来不错。我想我对此进行了测试,并对结果发表评论。谢谢。
  • 我对一些旧代码进行了小幅调整,以向您展示如何执行我上面所说的操作。你可以在这里找到它gist.github.com/3511928

标签: android android-fragments asynctaskloader


【解决方案1】:

答案是来自 Luksprog 的帖子。感谢您的帮助。

我对一些旧代码进行了小幅调整,以向您展示如何执行我上面所说的操作。你可以在这里找到它gist.github.com/3511928 – Luksprog

【讨论】:

    猜你喜欢
    • 2014-03-28
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多