Android导航组件和底部导航视图-硬返回按钮返回到“主页”,状态未保存

4szc88ey  于 2022-11-20  发布在  Android
关注(0)|答案(1)|浏览(189)

bounty将于明天到期。回答此问题可获得+50的声望奖励。Ahmed Ashraf正在寻找来自知名来源的答案:我很想听到对这些行为的解释,以及其中是否有任何一种是有意的。

上下文

我们正在迁移到使用我公司的导航组件,目前为止一切顺利。我们有一个底部导航视图,其中有5个选项卡,并使用NavigationUI对其进行设置。我们将“主页”作为导航图的起始目标选项卡。
使用navigation-*库的2.4.2版本。

问题

现在,每个选项卡都有自己的backstack,但在以下情况下,其状态将保持不变:

  • 浏览“主页”选项卡(现在已按下FragmmentA)。
  • 然后切换到另一个选项卡,我们将其命名为TabX(位于其backstack的根位置)。
  • 然后单击硬件上一步按钮。

预期值

由于按下返回键会消除当前标签页的堆栈,因此我们返回到“Home”标签页,其先前的状态保持不变(FragmentA被推到其顶部)。

发生了什么

我们返回到“Home”选项卡,只有Home片段,FragmentA没有显示。奇怪的是,当再次单击(重新选择)Home选项卡时,它现在显示先前保存的状态(FragmentA在Home顶部)。
由于这不是最好的用户体验,在这种情况下应该做什么?这些行为是预期的吗?
提前感谢!

kknvjkwl

kknvjkwl1#

1.您可以检查您的片段是否也与导航id相同。
1.对于导航弹出窗口,可以使用
findNavController().popBackStack()

<fragment
android:id="@+id/c"
android:name="com.example.myapplication.C"
android:label="fragment_c"
tools:layout="@layout/fragment_c">

<action
    android:id="@+id/action_c_to_a"
    app:destination="@id/a"
    app:popUpTo="@+id/a"
    app:popUpToInclusive="true"/>`

1.此外,请确保从主机活动代码重写onBackPressed()方法,如下所示:
override fun onBackPressed() { finish() super.onBackPressed() }

相关问题