FragmentPagerAdapter 和 FragmentStatePagerAdapter区别:
在使用方式上两者没有区别,区别主要体现在缓存上
FragmentPagerAdapter :
- 1、getItem只调用一次,调用一次将返回位置的Fragment缓存到mFragmentManager,下次切换调用instantiateItem直接从mFragmentManager的缓存拿,在mCurTransaction.attach(fragment);触发Fragment周期方法
- 2、Fragment切换的时候,销毁缓存, 仅销毁Fragent的视图onDestroyView
3、Fragment切换的时候,重新加载显示Fragment,仅创建视图onCreateView
FragmentPagerAdapter会把Fragment进行缓存,切换的时候虽然ViewPager会有缓存的创建和销毁但仅仅是创建和销毁Fragment的视图不会对Fragment对象有影响
FragmentStatePagerAdapter:
- 不会对Fragment进行缓存,每次切换的时候ViewPager销毁缓存和创建的时候都是直接销毁Fragment–>onDestroy, 创建的时候直接重新创建Fragment—>onCreate
- 使用的时候:由于FragmentPagerAdapter会对Fragment对象进行缓存,如果项目有很多个Fragment这个时候,超过6个,会内存浪费, 就选着FragmentPagerAdapter
- 当Fragment嵌套使用的时候,内层的Fragment切换使用的mFragmentManager必须是getChildFragmentManager内层的Fragment的生命周期才会起作用
Fragment fragment = mFragmentManager.findFragmentByTag(name);
mCurTransaction.attach(fragment);