一、前言:
我们在fragemnt大于2个时,有时会出现页面销毁的情况,我们通过以下方式解决。
class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
mFragments.clear();
mFragments.add(new MyLessonGoingFragment());
mFragments.add(new MyLessonStartFragment());
mFragments.add(new MyLessonFinishFragment());
mFragments.add(new MyLessonCancelFragment());
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//如果注释这行,那么不管怎么切换,page都不会被销毁
//super.destroyItem(container, position, object);
}
}
二、解决:
方法一:
由于FragmentPagerAdapter 默认支持2个Fragment页面切换,大于2个页面,第一个页面就会销毁,所以我们要设置屏幕外保存几个Fragment。
//有几个Fragment,设置屏幕外保存几个Fragment不销毁
contentViewPage.setOffscreenPageLimit(4);
代码如下:
MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
contentViewPage.setAdapter(adapter);
//有几个Fragment,设置屏幕外保存几个Fragment不销毁
contentViewPage.setOffscreenPageLimit(4);
contentViewPage.setOnPageChangeListener(this);
contentViewPage.setSelected(true);
方法二:
1、继承FragmentPagerAdapter 类;
2、重写destroyItem()方法;
3、如果注释这行,那么不管怎么切换,page都不会被销毁
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//如果注释这行,那么不管怎么切换,page都不会被销毁
//super.destroyItem(container, position, object);
}
