Android:Android Fragment嵌套使用存在的一些BUG以及解决方法

本文详细探讨了在Android中使用Fragment时遇到的常见问题,包括getActivity为null的解决方案,ChildFragmentManager出现No activity异常的处理,以及子Fragment无法接收到OnActivityResult的bug。通过对Fragment生命周期的理解和代码调整,提出了有效的解决策略。
摘要由CSDN通过智能技术生成

解决Fragment中调用getActivity为null的问题

在使用fragment的时候经常会遇到getActivity()为null的情况。之前解决这个问题,通常都是直接加空指针判断来规避,但是这并没有真正解决问题。
很多人都曾被这个问题所困扰,如果app长时间在后台运行,再次进入app的时候可能会出现crash,而且fragment会有重叠现象。如果系统内存不足、切换横竖屏、app长时间在后台运行,Activity都可能会被系统回收然后重建,但Fragment并不会随着Activity的回收而被回收,创建的所有Fragment会被保存到Bundle里面,从而导致Fragment丢失对应的Activity,这时getActivity()为null。
下面是FragmentActivity的部分源码


protected void onSaveInstanceState(Bundle outState) {
     super.onSaveInstanceState(outState);
     Parcelable p = mFragments.saveAllState();
     if (p != null) {
        outState.putParcelable( "android:support:fragments", p);
     }
}

如果从最近使用的应用里面点击我们的应用,系统会恢复之前被回收的Activity,这个时候FragmentActivity在oncreate里面也会做Fragment的恢复,

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mFragments.attachActivity(this, mContainer, null);
        // Old versions of the platform didn't do this!
        if (getLayoutInflater().getFactory() == null) {
            getLayoutInflater().setF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值