我已经阅读了几个类似的问题,但我没有找到一个令人信服的解决方案。
我正在编写一个FTP客户端应用程序,因此我有一个Activity
,其中包含三个标签(ListFragment
s):待处理,已完成和已失败的转移。实际传输在beckground中由Service
执行,它会更新DB / ContentProvider
中的三个相应表。我的活动使用LoadManager
在标签中显示数据库内容。
我的活动中的主要参与者是:
ViewPager
PagerAdapter
ListFragment
s ListAdapter
那么:这是将ListAdapter
传递给Fragment
的最佳位置?
到目前为止,我将适配器传递给Fragments到PagerAdapter的Fragment getItem(int)
方法。这样做,一切正常,直到您旋转设备。实际上,重新创建了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)
给出的位置相同。