关于fragment使用FrameLayout时,show/hidden和replace的问题

首先贴出使用show/hidden的方式切换fragment代码如下:

    //管理Fragment的栈
    public void addFragmentStack(int position) {
//              FragmentTransaction ft= getFragmentManager()
                .beginTransaction();
                Fragment fragment = fragments.get(position);
                if (!fragment.isAdded()) {
                    ft.add(R.id.fl_guanzhu, fragment);//fl_guanzhu是FrameLayout帧布局
                }
                for (int i = 0; i < fragments.size(); i++) {
                    if (i == position) {
                        ft.show(fragments.get(i));
                    } else {
                        ft.hide(fragments.get(i));
                    }
                }
                ft.commit();
    
        }

下面贴出使用replace方式切换fragment的代码如下:

   private void ReplaceFragmentMethod(int position) {
        FragmentTransaction tration = getFragmentManager() .beginTransaction();
        FragmentTransaction ft = fm.beginTransaction();
        Fragment fragment = fragments.get(position);
        ft.replace(R.id.fl_guanzhu, fragment);
        ft.addToBackStack(null);

       ft.commit();           
    }


返回直接调用popBackStack()方法:

 

getFragmentManager().popBackStack();

总结://在replace情况下,如果不添加ft.addToBackStack(null);这一句代码,那么fragment只在首次进入的时候会走生命周期,以后都不会走生命周期了。记得在commit之前添加哦。

      //而在show/hide情况下,就算添加了addToBackStack代码,fragment在第二次进入的时候,总是不会走生命周期方法。

    show/hidden的好处是可以记忆保存fragment上一次执行后的状态,但是在需要及时刷新fragment数据的需求上,明显不能满足我们的需求了。此时,我们可以继承onHiddenChanged来做,具体代码如下:

    @Override
    public void onHiddenChanged(boolean hidden) {
        // TODO Auto-generated method stub
        super.onHiddenChanged(hidden);
        if(!hidden){
          //如果当前fragment显示了,即处于当前,你就可以做自己想要的逻辑处理了。

        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值