bounty将于明天到期。回答此问题可获得+50的声望奖励。Ahmed Ashraf正在寻找来自知名来源的答案:我很想听到对这些行为的解释,以及其中是否有任何一种是有意的。
上下文
我们正在迁移到使用我公司的导航组件,目前为止一切顺利。我们有一个底部导航视图,其中有5个选项卡,并使用NavigationUI
对其进行设置。我们将“主页”作为导航图的起始目标选项卡。
使用navigation-*
库的2.4.2
版本。
问题
现在,每个选项卡都有自己的backstack,但在以下情况下,其状态将保持不变:
- 浏览“主页”选项卡(现在已按下FragmmentA)。
- 然后切换到另一个选项卡,我们将其命名为TabX(位于其backstack的根位置)。
- 然后单击硬件上一步按钮。
预期值
由于按下返回键会消除当前标签页的堆栈,因此我们返回到“Home”标签页,其先前的状态保持不变(FragmentA被推到其顶部)。
发生了什么
我们返回到“Home”选项卡,只有Home片段,FragmentA没有显示。奇怪的是,当再次单击(重新选择)Home选项卡时,它现在显示先前保存的状态(FragmentA在Home顶部)。
由于这不是最好的用户体验,在这种情况下应该做什么?这些行为是预期的吗?
提前感谢!
1条答案
按热度按时间kknvjkwl1#
1.您可以检查您的片段是否也与导航id相同。
1.对于导航弹出窗口,可以使用
findNavController().popBackStack()
或1.此外,请确保从主机活动代码重写
onBackPressed()
方法,如下所示:override fun onBackPressed() { finish() super.onBackPressed() }