我有一个FragmentActivity,其中包含一个ViewPager和一个FragmentPagerAdapter。
ViewPager中的每个片段都需要从Web服务加载数据。我已经编写了LoaderManager/自定义加载器来执行Web服务调用、解析XML等,这些工作都很好。
管理加载和片段有两种可能的设计方案。
1)主活动代表片段进行加载。
片段回调到主FragmentActivity请求其数据。如果没有正在运行的loader,则该活动将创建一个loader并执行加载。
在这种情况下,如何告诉片段数据已加载并准备好进行呈现?我使用的是自定义加载器而不是简单的游标,因此片段将从一个对象实例填充它的文本视图等,所以必须在对象被填充时通知它。
似乎FragmentPagerAdapter不允许在getItem中实例化片段时分配标签或ID。我怎么找到片段并告诉它绘制它的数据?
2)每个片段管理自己的加载。
片段初始化自己的加载器,每个片段都有自己的onCreateLoader/onLoaderFinish等。
我在这里遇到的问题是如果用户在加载程序运行时翻页,片段似乎会被销毁(有时)。结果,onLoaderFinished没有被调用,片段无法告诉主要活动它已经完成——主要活动正在控制操作栏中的进度指示器(setProgressBarIndeterminateVisibility)。
那么,当您拥有FragmentPagerAdapter、一个具有多个需要自己的加载器的页面的ViewPager时,什么是最佳的设计模式?
我遇到的另一个问题是使用getSupportLoaderManager检查是否有任何加载器正在运行。我从onLoadFinished中调用它。如果没有运行的加载程序,我可以隐藏进度指示器。然而,hasRunningLoaders有时返回true,即使所有加载器都已完成。
非常感谢您提供的建议或指向一些不错的样例。
谢谢, 马丁。
ViewPager中的每个片段都需要从Web服务加载数据。我已经编写了LoaderManager/自定义加载器来执行Web服务调用、解析XML等,这些工作都很好。
管理加载和片段有两种可能的设计方案。
1)主活动代表片段进行加载。
片段回调到主FragmentActivity请求其数据。如果没有正在运行的loader,则该活动将创建一个loader并执行加载。
在这种情况下,如何告诉片段数据已加载并准备好进行呈现?我使用的是自定义加载器而不是简单的游标,因此片段将从一个对象实例填充它的文本视图等,所以必须在对象被填充时通知它。
似乎FragmentPagerAdapter不允许在getItem中实例化片段时分配标签或ID。我怎么找到片段并告诉它绘制它的数据?
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);
}
非常感谢您提供的建议或指向一些不错的样例。
谢谢, 马丁。