Fragment addToBackStack(null)的作用

Fragment常用于一个activity中展示多个相对独立的部分,利用add,show,hide进行fragment的添加,展示和隐藏。

 FragmentA fragmentA = FragmentA .newInstance(parameter);
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.place_holder_view, fragmentA )
                        .show(goodsDetailFragment)
                        .commitAllowingStateLoss();
                        
 getSupportFragmentManager().beginTransaction().hide(fragmentA )
                        .add(R.id.place_holder_view, fragmentB )
                        .commitAllowingStateLoss();

.add(R.id.place_holder_view, fragmentB )可以显示fragment,此时点击手机的back键,会回调Activity的onBackPressed()函数,此时会直接关闭activity。
如果添加fragment时使用了 .addToBackStack(null),会将Fragment添加到回退栈中,有什么作用呢?此时点击back键,回调Activity的onBackPressed()函数会把当前展示的fragment弹出回退栈,展示前面添加的fragment。fragmentB.isAdded()显示为false,没有被添加,所以此时无法调用show函数使fragmentB展示。

 FragmentA fragmentA = FragmentA .newInstance(parameter);
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.place_holder_view, fragmentA )
                        .addToBackStack(null)
                        .show(goodsDetailFragment)
                        .commitAllowingStateLoss();

此时可以重写onBackPressed()函数,自己用代码hide,show相应的fragment。

//添加add之后,利用hide。show展示相应的已添加的fragment,此时不会重建fragment,只会走 onHiddenChanged(boolean hidden) 函数
 getSupportFragmentManager().beginTransaction().hide(fragmentA)
                        .show(fragmentB).commitAllowingStateLoss();

工作这两三年用了太多的fragment,有时间会写一下列表fragment配合viewpager 展示新闻信息的优化。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
addToBackStack() 方法是用来将当前的 Fragment 添加到返回栈中,以便在用户按下返回键时可以回到前一个 Fragment。如果你在跳转到另一个 Fragment 时使用了 addToBackStack() 方法,那么当用户按下返回键时,会返回到之前的 Fragment。这个方法的使用场景通常是在用户跳转到下一个 Fragment 时,需要保留上一个 Fragment 的状态,因此需要将其添加到返回栈中。 具体来说,使用 addToBackStack() 方法的步骤如下: 1. 在事务中使用 addToBackStack() 方法添加 Fragment 到返回栈中: ``` FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, new MyFragment()); transaction.addToBackStack(null); transaction.commit(); ``` 2. 当用户按下返回键时,系统会从返回栈中取出上一个 Fragment 并显示: ``` @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); } else { super.onBackPressed(); } } ``` 注意,在使用 addToBackStack() 方法时,需要注意以下几点: - addToBackStack() 方法的参数可以传入一个字符串,用来标识当前 Fragment 的状态,以便在需要时可以根据这个标识恢复状态。 - 当用户按下返回键时,系统会按照添加到返回栈中的顺序依次弹出 Fragment。因此,如果你在某个 Fragment 中又添加了多个 Fragment,并且都使用了 addToBackStack() 方法,那么用户按下返回键时,会依次返回到这些 Fragment。你需要确保返回栈中的顺序符合你的预期。 - 如果你不想将 Fragment 添加到返回栈中,可以不使用 addToBackStack() 方法,这样用户按下返回键时会直接退出 Activity。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值