0

我已经阅读了几个类似的问题,但我还没有找到一个方便的解决方案。

我正在编写一个 FTP 客户端应用程序,所以我有一个Activity包含三个选项卡(ListFragments)的:待处理、已完成和失败的传输。实际传输由 a 在后台执行Service,它更新 DB/ 中的三个相应表ContentProvider。我的活动使用 aLoadManager将数据库内容显示到选项卡中。

我的活动中的主要参与者是:

  1. 一个ViewPager
  2. 亲戚PagerAdapter
  3. 三个ListFragments
  4. ListAdapter他们的亲戚

那么:将 s 传递给s的最佳位置是哪个?ListAdapterFragment

到目前为止,我将适配器传递给 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).

4

0 回答 0