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