Android开发之Fragement框架层的使用

本文介绍了一种在Android应用中使用Fragment时保持其状态的方法。通过避免使用replace方法替换Fragment,而是利用show和hide方法来实现Fragment之间的切换,可以有效地保留用户在Fragment上的操作状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fragement是轻量级的,依附在activity上使用,生命周期也是跟随activity的。

app框架层Fragement的使用分两种形式:切换Fragement时保存当前状态和不保存当前状态,通过FragmentTransaction的replace方法,replace方法相当于先移除remove()原来所有已存在的fragments,然后添加add()当前这个fragment。这就导致了一个问题,我们切换一次,然后再切换回来,相当于重新加载了这个fragment,原来的状态不复存在,这显然与我们的日常使用不符。想要保存切换后的状态,思路还是很简单的,我们先添加了若干fragments,切换后将所有fragments都隐藏hide(),并显示show()切换后的fragment即可。

核心代码如下:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fl = (FrameLayout) findViewById(R.id.fl);
        fragmentManager1 = getFragmentManager();
        fragmentTransaction1 = fragmentManager1.beginTransaction();
        mf1 = new MyFragement1();
        fragmentTransaction1.add(R.id.fl,mf1);//fl是真布局,把mf1添加到真布局中
        fragmentTransaction1.commit();

    }
    public void click(View view)
    {
        fragmentTransaction1 = fragmentManager1.beginTransaction();//事务每次都要获取,使用一次后就失效了。
        hide();
        switch (view.getId()){
            case R.id.bt1:
                    fragmentTransaction1.show(mf1);
                break;
            case R.id.bt2:
                if(mf2==null)
                {
                    mf2 = new MyFragement2();
                    fragmentTransaction1.add(R.id.fl,mf2);
                }else{
                    fragmentTransaction1.show(mf2);
                }
                break;
            case R.id.bt3:
                if(mf3==null)
                {
                    mf3 = new MyFragement3();
                    fragmentTransaction1.add(R.id.fl,mf3);
                }else{
                    fragmentTransaction1.show(mf3);
                }
                break;
        }
        fragmentTransaction1.commit();
    }
    public void hide()//隐藏fragement,不隐藏无法显示show。
    {
        if(mf1!=null )
        {
            fragmentTransaction1.hide(mf1);
        }
        if(mf2!=null)
        {
            fragmentTransaction1.hide(mf2);
        }
        if(mf3!=null)
        {
            fragmentTransaction1.hide(mf3);
        }

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值