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