【发布时间】:2021-05-16 10:35:16
【问题描述】:
我有一个问题,按下后退按钮总是退出应用程序。
这是一个单一的活动应用程序,其中初始加载的屏幕是两个选项卡 viewpager2 布局,带有 2 个单独的导航图,每个选项卡一个。
viewpager 根据位置调用两个“空白”片段(因为 viewpager createFragment() 需要返回一个片段 - 这些“空白”片段每个都包含一个 NavHostFragment 即android:name="androidx.navigation.fragment.NavHostFragment"。
“主”导航图设置了app:defaultNavHost="true",另一个设置了app:defaultNavHost="false" 100% 明确。
我尝试将两者都设置为 true(对后退按钮没有影响),一个为 true,一个根本没有输入,没有任何效果。
我已将所有操作设置为在导航图中的目的地之间流动,并且前向导航工作正常。我只添加了合乎逻辑的“前进”动作,我的目标是稍后根据需要使用“popUpTo”和“popUpToInclusive”。
我的代码中的任何地方都没有调用onBackPressed()(我搜索了所有项目文件)。我的测试设备是 API26,开发人员选项没有任何工具可以对后退按钮进行编程(因为我正在疯狂寻找错误并认为那里检查 id)。
Viewpager2 是否会干扰导航组件的后台堆栈 - 我试图自己找出这一点,但没有取得多大成功。
编辑
我搜索了更多内容,发现几乎相同的问题已经解决 - 简而言之,添加一个 viewpager 作为具有两个嵌套导航图的根导航会干扰片段返回堆栈,并且需要 viewpager 适配器设置主导航片段每次更改片段时。请注意,在撰写本文时,该库仍处于 alpha 阶段。
请把下面的这篇文章作为我如何对我自己的问题的答案进行编码 - 一旦我完成了代码,我就把它作为答案发布(如果允许的话)。
How to navigate back from fragments inside NavHostFragment of ViewPager2?
【问题讨论】:
标签: android android-navigation android-viewpager2