fragment切换出现空白页

在App采用tab+fragment架构中,遇到点击底部按钮切换Fragment时出现空白页的bug。经过深入排查,最终在MainActivity的Fragment管理中找到了问题所在,使用了add和show方法进行切换。该文详细记录了解决这一问题的过程。

近期遇到一个bug,找了好久的原因,最后终于找到,在此记录一下

app的大体框架是由tab+fragment来组成的,就是类似于app 的底部有五个按钮,没点击一个按钮就会切换一个fragment,我们是在mainActiivty中进行fragment的切换的,我们用的add show方法

 // 开启一个Fragment事务
        transaction = fragmentManager.beginTransaction();
        // 先隐藏掉所有的Fragment,以防止有多个Fragment显示在界面上的情况
        transaction.setCustomAnimations(
                R.anim.fragment_slide_left_enter,
                R.anim.fragment_slide_left_exit,
                R.anim.fragment_slide_right_enter,
                R.anim.fragment_slide_right_exit);
        switch (index) {
//根据不同的index来进入不同fragment
  case 0:
                if (homeFragment == null) {
                    // 如果MessageFragment为空,则创建一个并添加到界面上
                    homeFragment = new HomeFragment();
                }
                switchContent(homeFragment);
                //transaction.replace(R.id.main_content_layout, homeFragment);
                break;

}

 /**
     * 修改显示的内容 不会重新加载
     **/
    public static void switchContent(android.support.v4.app.Fragment to) {
        if (fragment != to) {
            android.support.v4.app.FragmentTransaction transaction = fragmentManager.beginTransaction();
            if (!to.isAdded()) { // 先判断是否被add过
                transaction.hide(fragment).add(R.id.main_content_layout, to).commitAllowingStateLoss(); // 隐藏当前的fragment,add下一个到Activity中
            } else {
                transaction.hide(fragment).show(to).commitAllowingStateLoss(); // 隐藏当前的fragment,显示下一个
            }
            fragment = to;
        }
    }

先贴出代码,现在来讲述一下我遇到的问题,我们是底部的按钮最后一个按钮是“我的”,当我点击我的时候我要判断一下我的登录状态,如果没有登录要先登录,登录之后finish掉当前的activity,那么就会回到mainActivity  此时我点击我的,进入我的----点击退出登录----退出登录---回到mainAcitvty 再点击我的---需要登录--登录之后依然是回到MainActivity点击我的---此时我的界面是空白页,我就找原因,觉得并没有哪里出错,后来发现我每加载一个fragment的时候我都要判断这个fragment是否为null
                if (homeFragment == null) {
                    // 如果MessageFragment为空,则创建一个并添加到界面上
                    homeFragment = new HomeFragment();
                }
在我的也是这样的,所以这么个操作过程导致我myFragment退出登录又登录这个fragment并不是空的,所以直接add但是实际上又没有加进去,所以我在我的fragment add的时候不判断是不是null了直接就new 一个fragment问题就解决了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值