我已经阅读了几个类似的问题,但我还没有找到一个方便的解决方案。
我正在编写一个 FTP 客户端应用程序,所以我有一个Activity
包含三个选项卡(ListFragment
s)的:待处理、已完成和失败的传输。实际传输由 a 在后台执行Service
,它更新 DB/ 中的三个相应表ContentProvider
。我的活动使用 aLoadManager
将数据库内容显示到选项卡中。
我的活动中的主要参与者是:
- 一个
ViewPager
- 亲戚
PagerAdapter
- 三个
ListFragment
s ListAdapter
他们的亲戚
那么:将 s 传递给s的最佳位置是哪个?ListAdapter
Fragment
到目前为止,我将适配器传递给 Fragments 到Fragment getItem(int)
PagerAdapter 的方法中。这样做,在您旋转设备之前一切正常。实际上,Activity 被重新创建,但片段没有!恰好全新的 PagerAdapter 会查看 FragmentsManager 并找到片段,因此它不会调用 getItem 方法。
我的解决方法是将此代码放在活动的 onCreate 方法中:
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null)
for (int i = 0; i < fragments.size(); i++)
switch (i) {
case PENDING_ID:
((MyListFragment) fragments.get(i)).setListAdapter(pendingCursorAdapter);
break;
...
}
它确实工作正常,但它很棘手,没有人确保我在fragments[position]
列表中的位置与getItem(int position)
.