【问题标题】:going to first fragment from anywhere when pressing back button using backstack使用 backstack 按下后退按钮时从任何地方转到第一个片段
【发布时间】:2019-10-24 16:26:29
【问题描述】:

我有一个HomeFragment1ClassFragment2QuestionFragment3LastFragment4。用户将按提到的顺序导航。我想从用户按下返回按钮的任何地方返回 HomeFragment1。

我尝试在除 HomeFragment1 之外的所有片段中删除 addToBackStack,但是当按下返回按钮时片段重叠。

我在 MainActivity 的 onBackPressed() 中写了如下:

if(getFragmentManager().getBackStackEntryCount() > 0 ) {
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
    super.onBackPressed();
}

但是对于每次后按,它会按此顺序从 4 到 3 到 2 到 1 返回。我想从任何片段直接转到 1。

【问题讨论】:

标签: android android-fragments fragment-backstack


【解决方案1】:

对我有用的是:

1) 需要使用addToBackStack("text") 将所有片段添加到backstack。 因为不向 backstack 添加任何 Fragment 会使其在后按时与前一个 Fragment 重叠

2) 然后我们需要使用以下代码行来清除 backstack,这些代码应该添加到 onBackPressed() 覆盖的方法中。

if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
                getSupportFragmentManager().popBackStack(getSupportFragmentManager()
    .getBackStackEntryAt(0).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
    super.onBackPressed();
}

或者干脆

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

为这个问题找到了很多答案,如下所述,但对我有用的答案在上面。

Is this the right way to clean-up Fragment back stack when leaving a deeply nested stack?

Clear back stack using fragments

PopBackStack but keep the first fragment in android

How to clear Fragment backstack in android

感谢@Ankit Aman 提供链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多