近期遇到一个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问题就解决了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)