在android开发过程中使用ViewPager+Fragment开发页面是常见的情况,但在开发过程中碰到fragemnt正常显示,而fragment的变量却显示为null,对此进行探究。
查询答案发现是与fragment引用的获取有关,是由FragmentManage的saveState 以及 restoreState引起的,记录一下。
首先是有问题的引用获取方式,通过FragmentStatePagerAdapter的getitem方法获取引用,在使用时还判断了如果为null就通过getitem去获取:
但这种引用的获取方法是有问题的,在ViewPager中fragemnt的初始化是在FragmentPagerAdapter的instantiateItem方法中获得的,不一定会走getitem去获取。
总结一下就是当页面临时崩溃了,比如开启不保留活动,或者内存不足被系统强制回收了等,fragment会被FragmentManager回收,当回到当前页面时由于重新走了activity的onCreate把原来的fragment重建了,不需要getitem来构建fragment,此时由于activity也是重建的,fragment的引用就为null了。
应对方法:
1. 在FragmentStatePagerAdapter的instantiateItem方法中获取引用