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