美文网首页Android开发
Fragment already added也许是空指针异常导致

Fragment already added也许是空指针异常导致

作者: kross | 来源:发表于2019-03-18 17:23 被阅读2次

    今天遇到一个问题,Activity加载Apple,Boy,Cat,Dog四个Fragment的时候出现Fragment already added的异常。说Apple这个Fragment重复添加了。

    一路断点跟代码,终于找到了原因。

    1.首先找到出问题的地方,mAdded数组里面,如果已经有Apple这个Fragment了,再添加Apple进去,就会报错。

    image.png

    这里发现了一个怪事:
    这个addFragment会调用两次,第一次的时候,数组为空,理应添加Apple, Boy, Cat, Dog四个Fragment,第二次再来的时候,数组里为什么只有一个Apple呢?应该有4个才对啊。

    这时我推测:应该加入4个元素,但却只加入了1个元素,那就去外层调用看看吧。

    2.外层调用是在BackStackRecordexecuteOps()里面,由于我分别add了4个,并hide了4个,这个ops的数组的长度是8。

    可以看到下面代码,是一个循环,来处理这些操作记录,cmd=1是添加,cmd=4是隐藏。

    image.png

    然后我就发现了另一个怪事,本应该执行8次的循环,执行了2次就不执行了。也就是说……在这个循环里面有异常发生了!循环被中断了。

    3.然后就发现了,它会调用到onHiddenChanged方法

    image.png

    跑到Apple的onHiddenChanged方法里面一看,有个变量还没初始化,空指针异常了~

    总结

    Fragment的初始化如果调用到hide是会回调onHiddenChanged方法的,onHiddenChanged方法里面该判空的还是要判空。

    相关文章

      网友评论

        本文标题:Fragment already added也许是空指针异常导致

        本文链接:https://www.haomeiwen.com/subject/eyjbmqtx.html