获取数据(异步)并填充ViewPager的片段

时间:2013-07-17 22:37:53

标签: android android-viewpager fragment

我有一个ViewPager的活动,其中包含可变数量的片段(标签)。

启动时,活动会检查是否已加载相关(复杂)数据。如果没有,它会显示进度条视图并启动一个AsyncTask来获取数据。根据数据,活动会创建许多片段(制表符),并为每个片段提供数据的子集。

我目前持有对片段的引用(我知道它是不鼓励的)当片段被重用时我会遇到各种各样的问题 - 我将数据提供给片段的错误实例。

那么,是否存在解决此问题的“安卓方式”?

1 个答案:

答案 0 :(得分:2)

  

当片段被重用时,我会遇到各种各样的问题

片段通常不会在ViewPager中重复使用。这不像行AdapterView,行可以回收。使用FragmentPagerAdapterFragmentStatePagerAdapter,片段代表一个且只有一个页面。

  

我每次都重新实例化ViewPager(但片段会被重用?)

阿。这是一个稍微不同的问题。

FragmentPagerAdapterFragmentStatePagerAdapter的股票实施做了几个假设:

  1. 他们可以完全控制片段,特别是在运行事务以在UI中添加和删除它们

  2. 这些片段只会被一个“逻辑”ViewPager使用(IOW,重新创建ViewPager进行配置更改很好,但是那几乎就是这样)

  3. 使问题复杂化的是这些适配器将片段存储在某些标签下,因此如果这些片段仍然存在于那些标签中,那么将使用那些现有片段,而不是创建新片段。

      

    那么,是否存在解决此问题的“安卓方式”?

    从您的问题中不清楚为什么您甚至需要“重新实例化ViewPager”。我假设这与某种刷新操作有关,或者是其他强迫你完成第二段所述过程的事情。

    你可以尝试my ArrayPagerAdpater,因为外部代理人对这些片段进行捣乱更为友好。由于您可以控制片段的标记,因此您可以始终确定使用正确的片段 - 而不是自己缓存它们,只需检索正确的片段并对其进行操作。