fragment重叠现象的解决!

首先,在http://blog.csdn.net/shimiso/article/details/44677007  这个大神的讲解已经很详细了,让人受益良多! 

那么在我实际的开发中:也出现这个重叠现象,用两种方法可以解决:


(1)在activity有可能被销毁时,tabFragment被制空,它并不是不存在了,只是引用不存在了,我们可以在onSaveInstanceState(Bundle outState)中保存fragment,然后在onCreat(Bundle saveInstanceState)中如果saveInstanceState 不等于空,找回之前的fragment。

具体代码:   protected void onSaveInstanceState(Bundle outState){

outState.putInt("fragment_index",current_index);    // 其中 current_index 是当前的fragment的current_item;

fragmentManager.putFragment(outState,"oneFragment",onFragment);  //  中间的值相当于一个key 对应的value是第三个值

fragmetnManager.putFragment(outState,"twoFragment",twoFragment);

fragmentManager.putFragment(outState,"threeFragment",threeFragment);

}


然后在onCreate(Bundle saveInstanceState)中

protected void onCreate(Bundle saveInstanceState){

if(saveInstatnceState != null){

current_index = saveInstanceState.getInt("fragment_index",0);

oneFragment = (OneFragment)fragmentManager.getFragment(saveInstanceState,"oneFragment");   //  第二个参数就是上面中的key,对应起来

...

}

}

(2)第二种方法:不用在OnSaveInstatnceState(Bundle onutState)中使用manager.putFragment(...);  我们在调用fragment的add时 ,加上tag,让后再protected void onCreate(Bundle saveInstanceState){}  中使用  fragmentManager.findFragmentByTag(String Tag) 找到之前的fragment。


代码:

private void setTabSelection(int index) {

    FragmentTransaction transaction = manager.beginTransaction();

    hideFragment(transaction);

    switch (index){

        case MAIN_ZHUYE:

            if(oneFragment == null){

                oneFragment = new OneFragment();

                transaction.add(R.id.fl_content,oneFragment,"oneFragment"); // 第三个参数是tag

            }else {

                transaction.show(oneFragment);

            }

            break;

        case MAIN_SHEQU:

            if(twoFragment == null){

                twoFragment = new TwoFragment();

                transaction.add(R.id.fl_content,twoFragment,"twoFragment");

            }else {

                transaction.show(twoFragment);

            }

            break;

        case MAIN_XIAOXI:

            if(threeFragment == null){

                threeFragment = new ThreeFragment();

                transaction.add(R.id.fl_content,threeFragment,"threeFragment");

            }else {

                transaction.show(threeFragment);

            }

            break;
    }

    transaction.commit();
}


然后在:

protected void onCreate(Bundle saveInstanceState){

if(saveInstatnceState != null){

current_index = saveInstanceState.getInt("fragment_index",0);

oneFragment = fragment.findFragmentByTag("oneFragment");  //  tag

...

}

}



ps: 在用第一中方法的时候,还是有点问题,建议使用第二种方法!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值