在做项目的时候,使用的viewPager+fragment,其中一个界面加载比较耗时用的懒加载,然后在这个fragment里面有个子fragmen,当这个fragment调用onDestroyView()的时候去移除子fragment,然后再来回切换viewPager时出现:
java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.support.v4.app.Fragment.setNextAnim(int)’ on a null object reference
原因:
代码中并没有对Fragment进入和出入动画做设置,可以这样说,这段代码是谷歌官方的,但是它抛异常,进入源码我们来看executeOps这个方法
可以看出在这里f不可能为空op.exitAnim退出时应该为0但是却为null抛出异常,而这个异常是在我们对子fragment调用remove后产生的,也就是说这个时候fragment为null。相当于Activity重新执行了onCreate()方法(此时该activity并没有被销毁存在栈中),初始化Fragment的时候,导致fragment的变量为null
解决:
在remove()调用commit()之前加上:
fragmentTransaction.addToBackStack(null);
添加到堆栈中。