我有一个带有 ViewPager 和 FragmentPagerAdapter 的 FragmentActivity。
ViewPager 中的每个片段都需要从 Web 服务加载数据。我已经编写了 LoaderManager/custom Loaders 来执行 web 服务调用、解析 XML 等,这些都工作正常。
管理加载和片段有两种可能的设计。
1) 代表片段管理加载的主要活动。
片段调用主 FragmentActivity 请求它的数据。该活动检查该数据的加载器是否已经在运行,如果没有,它会创建一个并执行加载。
在这种情况下,我如何告诉片段数据已加载并准备好进行绘制。我使用的是自定义加载器而不是简单游标,因此片段将从对象实例填充其文本视图等,因此必须在填充对象时告知它。
当您在 getItem 中实例化片段时,FragmentPagerAdapter 似乎不允许您将标签或 Id 分配给片段。如何从 FragmentActivity 中找到片段并告诉它绘制数据?
2)每个片段管理自己的加载。
片段初始化自己的加载器,每个片段都有自己的 onCreateLoader/onLoaderFinish 等。
我在这里遇到的问题是,如果在加载程序运行片段时用户页面离开该页面似乎被破坏(有时)。因此,onLoaderFinished 没有被调用,并且片段无法告诉主要活动它已完成 - 主要活动正在控制操作栏中的进度指示器 (setProgressBarIndeterminateVisibility)。
那么,当您有一个 FragmentPagerAdapter、一个包含多个需要自己的加载器的页面的 ViewPager 时,最好的设计模式是什么?
我遇到的另一个问题是使用 getSupportLoaderManager 来检查是否有任何加载器正在运行。我从 onLoadFinished 中调用它。如果没有加载程序运行,我可以隐藏进度指示器。然而,hasRunningLoaders 有时会返回 true,即使所有加载程序都已完成。
LoaderManager lm = getSupportLoaderManager();
// If the loader is not already running, start it...
if (! lm.hasRunningLoaders()) {
setProgressBarIndeterminateVisibility(Boolean.FALSE);
}
非常感谢您的任何建议或为我指明一些不错的样品的方向。
塔马丁。