如何为FragmentPagerAdapter中的Fragment调用一些方法?

时间:2012-06-28 16:16:38

标签: android adapter android-viewpager

我有以下问题。我有ViewPagerFragmentPagerAdapter

我需要做的就是在选择此页面后,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中的每个片段实现的界面,当它在屏幕旋转后被调用时,我得到null Context

1 个答案:

答案 0 :(得分:0)

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

但是您的问题可以通过简单的方法解决,因为从我的问题中您可以理解,您不是在寻找UI配置更改并假设您使用的是API 11 +。

public void setRetainInstance(boolean retain)

  

自:API等级11

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

     
    
        
  • 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);
}