我正在使用Android导航组件(目前为v2.1.0),我正在尝试解决如何最好地处理需要自己的BottomNavigationView的子屏幕,MainActivity已经有了顶级的BottonNavigationview。
Google似乎真的提倡在大多数情况下使用单一活动架构。以下是我目前的情况:
- Main Activity
- NavHostFragment & Top Level BottomNav
NavHost has navGraph of main_navigation.xml: this has the MainActivity top level
bottom navigation fragments, (e.g. Groups, Courses, Profile etc.) and also a link to the child
fragment which should have its own BottomNav
- ChildFragment
- Has its own NavHostFragment in its layout, and its own BottomNav
This NavHost has navGraph of childfragment_navigation.xml: which, similar to MainActivity,
handles the bottom navigation fragments for the child fragment etc. etc.
这带来了一些问题。首先,我得展示一下
private fun setupNavController() {
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_groups, R.id.navigation_courses, R.id.navigation_profile
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
nav_view.setupWithNavController(navController)
navController.addOnDestinationChangedListener { _, destination, _ ->
when (destination.id) {
R.id.navigation_groups, R.id.navigation_courses, R.id.navigation_profile -> showBottomNavigation()
else -> hideBottomNavigation()
}
}
}
override fun onSupportNavigateUp(): Boolean {
return findNavController(R.id.nav_host_fragment).navigateUp() || super.onSupportNavigateUp()
}
private fun hideBottomNavigation() {
nav_view.visibility = View.GONE
}
private fun showBottomNavigation() {
nav_view.visibility = View.VISIBLE
}
这感觉真的很笨拙,有点笨拙,并且开始在MainActivity中添加一些不需要的视图逻辑。
第二个问题是与appbar和backstack的东西有关。进入子片段后,我会获得该子片段的更新工具栏标题,但随后任何进一步的操作栏更新都无法正常工作,如果我向下钻取到其他子片段,则除了将我带回 MainActivity 之外,按回最初不会起作用。将 app:defaultNavHost=“true”
添加到两个 NavHostFragments 似乎可以解决一些问题,即后退按钮在子片段中正常工作一次,尽管应用栏向上按钮不适用于子片段的子片段,但它始终返回到 MainActivity。
我试着把这个放在儿童片段中:
NavigationUI.setupActionBarWithNavController(activity as AppCompatActivity, navController)
这会更新工具栏标题,但向上按钮仍然返回主活动。
对于这种应用程序结构,我可以想到3种可能的解决方案(子片段有自己的底部导航):
你可以遵循谷歌单一活动架构模式,但单个导航主机片段和单个导航图不能救你,你需要使用多个导航主机,每个导航主机都有自己的导航图。你需要在多个navHostFragment之间切换,每个都有自己的导航,这样它就可以正常工作。
你可以从这里得到帮助[https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt.]
所以我在我的应用程序中使用Android导航,我遇到了这样的情况: 我有2个碎片A- 我遵循这个答案,得到了这个解决方案: 当我按下硬件后退按钮时,这个解决方案工作得很好,但是当我按下工具栏上的后退按钮时,回调不会被调用。请帮帮我,谢谢。 这是我的MainActive的导航设置:
我想知道如何使用导航控制器正确处理系统后退按钮动作。在我的应用程序中,我有两个片段(例如,fragment1和fragment2),我在fragment1中有一个操作,目标是fragment2。除了一件事之外,所有的工作都很好--当用户按下fragment2中的system back按钮时,我希望显示一个对话框(例如使用DialogFragment)来确认退出。实施这种行为的最佳方式是什么?如果我
问题内容: 我有嵌套的JSON对象,例如 而且我需要获取_events数组并对其进行解析。但是我不知道_events之前的单元格中的内容以及它们的状态。如何使用这种结构? 问题答案: 就像这样使用它: 这是一个有效的jsFiddle:http : //jsfiddle.net/ErHng/( 注意 :它会输出到控制台,因此您需要/ 在chrome中或在Firefox中打开firebug,然后重新运
我正在一个新的Android应用程序上使用导航组件,但我不知道怎么做 首先,我有我的主活动,我有main_navigation_graph 主要活动 NavHostFragment main_navigation_graph里面有3个碎片 这里一切都很好。问题是当我到达最后一个片段时,因为在这个片段上,我想根据BottomNavigationView输入(暂时)显示一些子片段(在新的NavHost
我试图遵循谷歌最新的良好实践,用导航组件实现单个活动应用程序。 然而,在阅读了整个导航留档后,我仍然认为有很多情况下,他们没有解决。 例如,我应该如何实现以下情况: 应用程序在闪屏中启动。然后在加载后进入新闻片段。 注意:闪屏应该从后台弹出,因为它不应该再出现了。 然而,部分中的一些片段可以导航到一个新区域,该区域应该有一个后退按钮(而不是抽屉)。