最近碰到个比较奇葩的需求,总结问题就是ViewPager和Fragment搭配使用(3种以上类型的Fragment),Fragment列表中的不同种Fragment顺序改变,或者删除增加导致的各种崩溃问题,不论使用FragmentPagerAdapter还是FragmentStatePagerAdapter都会出现不同类型的错误,也让我看到了这两种PageAdapter的局限性,在此总结,希望能帮到遇到同样问题的亲们。
本篇内容
一、FragmentPagerAdapter和FragmentStatePagerAdapter的区别以及局限性
二、由于ViewPager中Fragment列表的增删和顺序变化,导致ViewPager调用notifyDataSetChanged()方法出现异常或应用崩溃的解决方案
————————————————分割线————————————————
内容一:FragmentPagerAdapter和FragmentStatePagerAdapter的区别以及局限性
FragmentPagerAdapter和FragmentStatePagerAdapter,这两个adapter刚开始用的时候分不清,不过似乎不论用哪个adapter出来的效果都差不多,用的多的人知道,当viewpager中fragment数量多的时候用FragmentStatePagerAdapter,反之则用FragmentPagerAdapter。在这里我想从两个问题展开,看清这两个问题,大家就一目了然了:
1.两种adapter存储/恢复fragment的区别
2.两种adapter销毁fragment的区别
存储和恢复:
FragmentPagerAdapter
初始化方法:
@Override
public Object instantiateItem(ViewGroup container, int position) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
final long itemId = getItemId(position);
// Do we already have this fragment?
String name = makeFragmentName(container.getId(), itemId);//给Fragment命名