如何弹出碎片背斜

时间:2013-02-20 03:28:14

标签: android back-stack

我有一个活动A,它调用片段Bf,它调用片段Cf.我希望在调用Cf时将Bf放在backstack中,以便用户可以导航回它。但是,如果在Cf中按下特定按钮,我希望将Bf从后台堆叠中移除。这可能吗?

我看到有一个popBackStack()函数。但是,我对这将如何工作有点困惑。使用此功能是否安全?在Backstack上Bf之后是否有可能插入来自不同应用程序的活动?

另外,有没有办法改变backstack上片段的savedInstanceState?

我无法弄清楚如何使用模拟器在backstack上进行强大的测试。

4 个答案:

答案 0 :(得分:109)

您可以按名称弹出片段。在向后堆栈添加片段时,只需给它们命名即可。

fragmentTransaction.addToBackStack("fragB");
fragmentTransaction.addToBackStack("fragC");

然后在Fragment_C中,使用名称... fragB弹出后台堆栈并包含POP_BACK_STACK_INCLUSIVE

someButtonInC.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        FragmentManager fm = getActivity()
                .getSupportFragmentManager();
        fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
});

答案 1 :(得分:5)

从BackStack中弹出片段的三种方法

  1. 只需添加此行

        getActivity().getSupportFragmentManager().popBackStack();
    

2。#

        getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

3。#

    getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

通过片段轻松弹出后缀的所有简单方法

答案 2 :(得分:0)

在我们添加名称(如“稍后交易”)时,首先替换片段container_view

   getSupportFragmentManager().beginTransaction().replace(R.id.container_view, 
    profileFragment, "Profile").addToBackStack("Later Transaction").commit();

然后在背面按,使用“稍后交易”名称弹出背景堆栈

     int count = getSupportFragmentManager().getBackStackEntryCount();
    if(count > 1) {
     getSupportFragmentManager().popBackStack("Later Transaction", 
     FragmentManager.POP_BACK_STACK_INCLUSIVE);
    } else {
        DialogUtils.show(HomeActivity.this, 
        getString(R.string.exit_app_message), getString(R.string.alert), 
       "Yes","No", new DialogUtils.ActionListner() {
            @Override
            public void onPositiveAction() {
                finish();
            }
            @Override
            public void onNegativeAction() {
            }
        });
    }

答案 3 :(得分:0)

下面是使用BackStackEntry

弹出最后一个片段的示例
val manager = supportFragmentManager
try {
    // get last entry (you can get another if needed)
    val entry = manager.getBackStackEntryAt(manager.backStackEntryCount - 1)
    // you can pop it by name
    manager.popBackStack(entry.name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
    // or pop by id
    manager.popBackStack(entry.id, FragmentManager.POP_BACK_STACK_INCLUSIVE)
} catch (ex: Exception) {
    ex.printStackTrace()
}