我有一个主屏幕显示应用程序的常规信息,并在底部显示其他信息。
如果用户在导航抽屉菜单上单击某些内容,然后选择一个新屏幕,则主屏幕内容可能会更改。
当用户单击以获取更多数据时,主屏幕上的底部工作表也会更改。
因此,我基本上在底部的工作表中有一个嵌套的导航,该导航位于主屏幕的主导航之内。
我的问题是,当使用新的Android体系结构组件Navigation Controller
时,有app:defaultNavHost="true"
选项会拦截后退按钮。
后退按钮的这种自动拦截使我的用例非常复杂。我想要的是,当用户位于主屏幕中时,底部页面可以控制后退按钮,而当用户切换主屏幕时,则由主屏幕控制后退按钮。
app:defaultNavHost
,以便嵌套的Navigation Controllers
可以共存并协调后退按钮的所有权? 答案 0 :(得分:5)
Navigation 1.0.0-alpha04中的一项修复功能是,导航自动将每个片段目标设置为primary navigation fragment,从而确保任何子片段管理器(例如嵌套导航图使用的子片段管理器)都将自动在外部片段管理器之前 接收返回按钮。
这意味着,如果您在同时使用app:defaultNavHost="true"
的另一个NavHostFragment中使用带有app:defaultNavHost="true"
的NavHostFragment,它将立即可用。如果您要手动进行碎片处理,并使用getChildFragmentManager()
在导航创建的任何碎片中添加到后堆栈,则同样的事情同样适用。
如the original issue中所述,app:defaultNavHost="true"
正在使用现有的Fragment API,并且可以使用以下代码随时通过编程方式进行更改:
// This effectively removes the app:defaultNavHost flag
getSupportFragmentManager().beginTransaction()
.setPrimaryNavigationFragment(null)
.commit()
// Pass in your NavHostFragment to re-enable the flag