android - 导航组件 - 后退按钮退出应用
问题描述
我有一个问题,按下后退按钮总是退出应用程序。
这是一个单一的活动应用程序,其中初始加载的屏幕是两个选项卡 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 阶段。
请把下面的这篇文章作为我如何对我自己的问题的答案进行编码 - 一旦我完成了代码,我就把它作为答案发布(如果允许的话)。
解决方案
如果您没有 onBackPressed 则在您的活动中调用此方法,并在从以前的活动中调用当前活动时检查当前活动是否有完成方法。
如果没有任何效果,则在当前活动中调用 onBackPressed 方法并实现双击以退出 onBackPressed 方法。
查看此帖子以双击退出:单击后退按钮两次以退出活动
谢谢并希望它可以帮助你。
推荐阅读
- c# - 使用自定义协议
- c++ - 如何将不同大小的数组传递给我的 c++ 函数?
- tabs - Bootstrap - 滚动并打开特定选项卡的链接
- c# - 用 Open XML SDK 替换文本
- ios - 向 NotificationCenter 观察者添加参数 UIbutton
- git - 如何使用 .git 文件在 git 中查看或检索我的电子邮件和密码
- javascript - 在保持 JSON 文件完整的同时替换 Javascript 中的字符串
- c - 顺序发出的存储/装载是否以相同的顺序完成?
- powershell - 如何使用powershell在电脑上远程运行命令
- reporting-services - SSRS 表达式不适用于 Runningvalue