首页 > 解决方案 > 导航组件 - 后退按钮退出应用

问题描述

我有一个问题,按下后退按钮总是退出应用程序。

这是一个单一的活动应用程序,其中初始加载的屏幕是两个选项卡 viewpager2 布局,带有 2 个单独的导航图,每个选项卡一个。
viewpager 根据位置调用两个“空白”片段(因为 viewpagercreateFragment()需要返回一个片段 - 这些“空白”片段每个都包含一个 NavHostFragment ,即android:name="androidx.navigation.fragment.NavHostFragment".

“主”导航图已app:defaultNavHost="true"设置,另一个必须app:defaultNavHost="false"100% 明确。
我尝试将两者都设置为 true(对后退按钮没有影响),一个为 true,一个根本没有输入,没有任何效果。我已将所有操作设置为在导航图中的目的地之间流动,并且前向导航工作正常。我只添加了合乎逻辑的“前进”动作,我的目标是稍后根据需要使用“popUpTo”和“popUpToInclusive”。

我没有onBackPressed()在我的代码中调用任何地方(我搜索了所有项目文件)。我的测试设备是 API26,开发人员选项没有任何工具可以对后退按钮进行编程(因为我正在疯狂地寻找错误并认为那里检查 id)。

Viewpager2 是否会干扰导航组件 backstack - 我试图自己找出这一点,但没有取得多大成功。

编辑

我用谷歌搜索了很多,发现几乎相同的问题已经解决 - 简而言之,添加一个 viewpager 作为具有两个嵌套导航图的根导航会干扰片段返回堆栈,并且需要 viewpager 适配器每次设置主导航片段片段被改变。请注意,在撰写本文时,该库仍处于 alpha 阶段。

请把下面的这篇文章作为我如何对我自己的问题的答案进行编码 - 一旦我完成了代码,我就把它作为答案发布(如果允许的话)。

如何从 ViewPager2 的 NavHostFragment 内的片段导航回来?

标签: androidandroid-navigationandroid-viewpager2

解决方案


如果您没有 onBackPressed 则在您的活动中调用此方法,并在从以前的活动中调用当前活动时检查当前活动是否有完成方法。

如果没有任何效果,则在当前活动中调用 onBackPressed 方法并实现双击以退出 onBackPressed 方法。

查看此帖子以双击退出:单击后退按钮两次以退出活动

谢谢并希望它可以帮助你。


推荐阅读