android-fragments 如何将片段弹出回栈

8fq7wneg  于 2022-11-14  发布在  Android
关注(0)|答案(5)|浏览(218)

我有一个Activity A,它调用fragment Bf,fragment Bf又调用fragment Cf。我希望在Cf被调用时,Bf被放到backstack中,这样用户就可以导航回它。但是,如果Cf中的某个特定按钮被按下,我希望Bf从backstack中被移除。这可能吗?
我看到有一个popBackStack()函数。但是,我对它的工作方式有点困惑。使用这个函数安全吗?是否有可能在backstack上的Bf之后插入来自不同应用程序的Activity?
另外,有没有办法改变backstack上片段的savedInstanceState?
我只是不知道如何使用模拟器在backstack上进行健壮的测试。

9nvpjoqh

9nvpjoqh1#

你可以按名字弹出片段。当把片段添加到后台堆栈时,只需要给予它们一个名字。

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

然后在Fragment_C中,使用名称ie.. 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);
    }
});
7lrncoxx

7lrncoxx2#

从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);

这些都是从Backstack弹出片段的简单方法

rbl8hiat

rbl8hiat3#

"你可以试试这样"

val fm= parentFragmentManager
fm.popBackStack("group", FragmentManager.POP_BACK_STACK_INCLUSIVE)
jgwigjjp

jgwigjjp4#

第一次替换片段container_view时,我们将名称添加为“Later Transaction”

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() {
            }
        });
    }
lnxxn5zx

lnxxn5zx5#

下面是使用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()
}

相关问题