AndroidX Navigation 在 BottomNavigationView 上显示新的 NavigationG



我找不到解决这个问题的干净解决方案:

我有一个包含BottomNavViewNavControllermainActivity,它占用了底部导航上方的所有空间,navigation_main.xml作为图形。 在其中一个底部导航选项卡上,我有一个项目列表,当用户选择该项目时,它应该打开一个新屏幕(即 bottomNavView,应该不再可见(显示项目的信息,模型通过navigationArgs与列表中的模型一起提供。 我已经创建了一个新navigation_details.xml,其中包含详细信息(对话框等(的导航设置。

我得出了两种可能的解决方案,但都不喜欢:

  1. 打开一个新活动,该活动的唯一工作是包含 navController 并托管新流,然后将其添加为navigation_main中的导航目标。我发现将 nav 参数传递给片段的唯一解决方案是让片段尝试从它自己的参数中提取它,如果那里不存在,请尝试父活动的intent.extras。这要求导航中的argument:name=""[...]。对于活动操作和 details片段具有相同的键,xml 是相同的。这本质上是一个关于如何在来自另一个导航图时将参数传递给 startDestination 的问题。

  2. 让 detailsFragment 显示为全屏对话框(强制所有后续导航也为全屏对话框(。

有人知道一种更好、更干净的集成方法吗? (此外,这是我完全集成导航组件的第一个应用程序,所以我的迎角可能会关闭(

如果你想像这样将参数从 naveGrap 传递到另一个 navGrph 使用。 也许这段代码会对你有所帮助,如果您需要更多帮助,请与我联系。

如果你给我看你的代码,也许我可以帮你...

NavDestination destinationFrom1;
navHostFragment1.getNavController().addOnDestinationChangedListener((controller, 
destination, arguments) -> {
switch (destination.getId()) {

case R.id.profileFragment:
destinationFrom1= destination;
navigationListener.isHideBottomNavigation(false, destination.getId());
break;
default:
navigationListener.isHideBottomNavigation(true, destination.getId());
break;
}
});
navHostFragment2.getNavController().addOnDestinationChangedListener((controller, 
destination, arguments) -> {
switch (destination.getId()) {

case R.id.guidFragment:
Map<String, NavArgument> arguments1 = destination.getArguments();
if(destinationFrom1!= null) {
destinationFrom1.addArgument("ssss",ANYARGUMENT);
}
break;
default:
navigationListener.isHideBottomNavigation(true, destination.getId());
break;
}
});

最新更新