重新跳转到Activity,其中的fragment显示空白

重新跳转到Activity,其中的fragment显示空白_在喝汁粥的博客-CSDN博客

崩溃, 我的Activity中fragment都显示空白. 在我的项目中有一个接受推送消息, 消息到来时, 打开Activity, 展示对应信息. 而打开activity之后,发现fragment都显示空白.  找了很久原因, 也在网上看看了好多解决办法, 但是好像都不是我这种现象.

然后, 我只能自己冷静下来好好梳理这个跳转逻辑, 终于找到了问题原因.  因为的activity中的fragment是通过我创建的fragmentfactory类来提供的,而这个fragmentfactory类中管理了一个fragment集合, 每次提供fragment的时候先看集合中有没有, 如果有就从集合中拿取返回. 而我在重新打开activity的时候, 其实是相当于创建了一个新的activity, 不再是之前的那个activity了, 而fragment还是保存在fragmentfactory中, fragment中保存的依附activity还是原来的那个activity, 让其在新创建的activity上显示是显示不出来的, 所以显示的是空白.

所以,要保证fragment能正常显示,就要保证其依附的activity不改变, 我的解决办法是在清单文件中将activity的launchmode设置为singleTop. 当然,如果fragment不做存储,每次都重新创建新的fragment也不会出现这样的问题.
 

---------------------------------------------------------------------------------------------------------

我尝试上面的方法依旧不行,我的解决方法是第一次取fragment的时候先清除一下,这样就没问题了


import java.util.HashMap;

public class FragmentFactory {
    private static HashMap<Integer, BaseFragment> mFragmentMap = new HashMap<>(16);

    public static BaseFragment createOverFragment(int pos) {
        BaseFragment fragment = mFragmentMap.get(pos);
        if (fragment == null) {
            switch (pos) {
                case 0:
                    fragment = new CallMainFrag();
                    break;
                case 1:
                    fragment = new CallRecordFrag();
                    break;
                case 2:
                    fragment = new CallPhoneFrag();
                    break;
                case 3:
                    fragment = new CallContactsFrag();
                    break;
                case 4:
                    fragment = new CallAudioGroupFrag();
                    break;
                case 5:
                    fragment = new CallVideoGroupFrag();
                    break;
                default:
                    fragment = new CallRecordFrag();
                    break;
            }
            mFragmentMap.put(pos, fragment);
        }
        return fragment;
    }

    /**
     * 连续打开关闭打开关闭Activity会导致空白,最后一次会加载空白
     * 解决办法:在oncreate方法,也就是上面第一次方法取fragment之前清理一次
     * https://blog.csdn.net/xiao22long/article/details/73608502
     */
    public static void clear() {
        mFragmentMap.clear();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值