我有以下问题。我有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
中的每个片段实现的界面,当它在屏幕旋转后被调用时,我得到null Context
答案 0 :(得分:0)
设备配置可在运行时(例如屏幕方向)更改。发生这种情况时,重新启动活动。这样做是为了使您的活动可以调整以匹配新设备配置,并且由于片段在活动中,它们也被“销毁”。
但是您的问题可以通过简单的方法解决,因为从我的问题中您可以理解,您不是在寻找UI配置更改并假设您使用的是API 11 +。
自: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);
}