【问题标题】:Getting data (asynchronous) and populating ViewPager's fragments获取数据(异步)并填充 ViewPager 的片段
【发布时间】:2013-07-17 22:37:52
【问题描述】:
我有一个带有 ViewPager 的活动,其中包含可变数量的片段(标签)。
活动开始时会检查相关(复杂)数据是否已加载。如果没有,它会显示一个进度条视图并启动一个获取数据的AsyncTask。根据数据,活动创建许多片段(选项卡)并为每个片段提供数据的子集。
我目前持有对片段的引用(我知道不鼓励这样做),并且在片段被重用时遇到各种问题 - 我将数据提供给错误的片段实例。
那么,有没有“安卓方式”来解决这个问题?
【问题讨论】:
标签:
android
android-viewpager
fragment
【解决方案1】:
当片段被重复使用时,我遇到了各种各样的问题
片段通常不会在ViewPager 中重复使用。这不像 AdapterView 那样行被回收。使用FragmentPagerAdapter 或FragmentStatePagerAdapter,片段代表一页且仅一页。
我每次都重新实例化 ViewPager(但片段会被重用?)
啊。这是一个稍微不同的问题。
FragmentPagerAdapter 和 FragmentStatePagerAdapter 的现有实现做了几个假设:
他们可以完全控制片段,尤其是在运行事务以在 UI 中添加和删除片段方面
-
这些片段只会被一个“逻辑”ViewPager 使用(IOW,为配置更改重新创建 ViewPager 很好,但差不多就是这样)
李>
复杂的事情是这些适配器将片段存储在某些标签下,因此如果这些片段仍然存在于这些标签中,则将使用那些现有的片段,而不是创建新的片段。
那么,有没有“安卓方式”来解决这个问题?
您的问题不清楚为什么您甚至需要“重新实例化ViewPager”。我假设这与某种刷新操作或其他迫使您完成第二段中描述的过程有关。
你可以试试my ArrayPagerAdpater,因为它对外部代理处理碎片更友好。由于您控制片段的标签,因此您始终可以确定您正在使用正确的片段 - 而不是自己缓存它们,只需检索正确的片段并对其进行操作。