4

我有以下问题。我有ViewPager并且FragmentPagerAdapter为此。

我需要做的Fragment就是在ViewPager选择此页面时从我的方法中调用一些方法。

我试图将所有片段保留List在我的适配器内,但问题是当我旋转我的设备适配器时使用以前的片段。旋转后创建了新片段,我有它们的列表,但我现在不知道如何访问以前的片段。我只引用了新片段。

这是我的适配器:

public class MainPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragmentList;

    public MainPagerAdapter(FragmentManager fm) {
        super(fm);
        fragmentList = new ArrayList<Fragment>();
        fragmentList.add(new TaskPageFragment());
        fragmentList.add(new HistoryFragment());
        fragmentList.add(new TestFragment());
    }

    @Override
    public Fragment getItem(int i) {
        return fragmentList.get(i);
    }

    @Override
    public int getCount() {
        return 3;
    }
}

当然,当我尝试访问仅像对象一样创建的片段时,我无法访问活动上下文。

Fragment fragment = pagerAdapter.getItem(i);
if (fragment instanceof SelectionListener) {
     ((SelectionListener)fragment).onTabSelected();
}

这里onTabSelected()显示了方法调用。这是我为每个片段实现的接口,ViewPager当它在屏幕旋转后被调用时,我得到 nullContext

4

1 回答 1

0

设备配置可以在运行时更改(例如屏幕方向)。发生这种情况时,Activity 将重新启动。这样做是为了让您的活动可以调整以匹配新的设备配置,并且由于片段在活动中,它们也被“销毁”。

但是,您的问题可以通过一些简单的方法来解决,因为根据我从您的问题中了解到的情况,您并不是在寻找 UI 配置更改,而是假设您使用的是 API 11+。

公共无效 setRetainInstance(布尔保留)

自:API 级别 11

控制是否在 Activity 重新创建期间(例如从配置更改)保留片段实例。这只能与不在后台堆栈中的片段一起使用。如果设置,片段生命周期将在重新创建活动时略有不同:

  • onDestroy() 将不会被调用(但 onDetach() 仍然会被调用,因为片段正在与其当前活动分离)。
  • onCreate(Bundle) 不会被调用,因为片段没有被重新创建。
  • onAttach(Activity) 和 onActivityCreated(Bundle) 仍将被调用。
public MainPagerAdapter(FragmentManager fm) {
    Fragment frag = null;
    super(fm);
    fragmentList = new ArrayList<Fragment>();
    frag = new TaskPageFragment();
    frag.setRetainInstance(true);
    fragmentList.add(frag);

    frag = new HistoryFragment();
    frag.setRetainInstance(true);
    fragmentList.add(frag);

    frag = new TestFragment();
    frag.setRetainInstance(true);
    fragmentList.add(frag);
}
于 2012-06-28T18:38:22.037 回答