Android Fragment动态创建时replace()和add()方法的区别

1、replace()顾名思义“替换”,会销毁布局容器内的已有视图,这样会导致每次切换Fragment时都会重新初始化,浪费流量。

//获取碎片管理者
fragmentManager = getSupportFragmentManager();

//事务是不能共享的,每次用到都要重新开启一个事务,之后提交
FragmentTransaction fragmentTransactiontwo = fragmentManager.beginTransaction();
//参数:1.父容器   2.要替换的fragment。
fragmentTransactiontwo.replace(R.id.framelayout, fragmentTwo);
//提交事务
fragmentTransactiontwo.commit();

因此,如果你有一个很高的概率会再次使用当前的Fragment,建议使用add()搭配show(),hide()使用,可以提高用户体验

2、add()是添加Fragment于容器布局中,再搭配事务对象的show()和hide()方法来显示和隐藏,它们最终是让FragmentsetVisibility(true还是false),不会调用生命周期。

     homepageFragment = new HomepageFragment();
     hotFragment = new HotFragment();
     meFragment = new MeFragment();

     getSupportFragmentManager().beginTransaction()
              .add(R.id.content_fragment_layout,homepageFragment, "homepageFragment")
              .add(R.id.content_fragment_layout,hotFragment,"hotFragment")
              .add(R.id.content_fragment_layout,meFragment,"meFragment")
              .show(homepageFragment)
              .hide(hotFragment)
              .hide(meFragment)
              .commit();

     在跳转前将当前的fragment隐藏,要显示的frment进行显示:

/*3、初始化底部导航菜单*/
    private void initBottomNavigationView()
    {
        bottomNavigationView= (BottomNavigationView)findViewById(R.id.bottom_navigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener()
        {
            @Override
            public boolean onNavigationItemSelected(MenuItem item)
            {
                switch (item.getItemId())
                {
                    case R.id.bottom_navigation_homepage:
                        topView.setVisibility(View.VISIBLE);
                        toolbar.setVisibility(View.VISIBLE);

                        getSupportFragmentManager().beginTransaction()
                                .show(homepageFragment)
                                .hide(hotFragment)
                                .hide(meFragment)
                                .commit();

                        break;

                    case R.id.bottom_navigation_find:
                        topView.setVisibility(View.GONE);
                        toolbar.setVisibility(View.GONE);

                        getSupportFragmentManager().beginTransaction()
                                .show(hotFragment)
                                .hide(homepageFragment)
                                .hide(meFragment)
                                .commit();
                        break;

                    case R.id.bottom_navigation_me:
                        topView.setVisibility(View.GONE);
                        toolbar.setVisibility(View.GONE);

                        getSupportFragmentManager().beginTransaction()
                                .show(meFragment)
                                .hide(homepageFragment)
                                .hide(hotFragment)
                                .commit();
                        break;
                }
                return true;
            }
        });
    }



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java架构何哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值