导航组件 - onSupportNavigateUp()
Navigation Components - onSupportNavigateUp()
真的有必要打电话吗
override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
在我的 MainActivity 中?
因为当我在我的 xml 中附加 NavHostFragment 时,它从那里开始,但我看过 Google I/O 讲座,他们用它来制作导航
我的问题
需要用在什么地方?
谢谢
onSupportNavigateUp
来自 AppCompatActivity
。您应该在定义 NavHostFragment
(可能是您的 MainActivity)的同一 activity 中覆盖该方法。您覆盖它,以便 NavigationUI
可以正确支持向上导航甚至抽屉布局菜单。 AppCompatActivity
和 NavigationUI
是两个独立的组件,因此您重写该方法以连接两者。请注意,如果您使用导航组件设置工具栏,即,如果您执行类似于
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
// ...
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
findViewById<Toolbar>(R.id.toolbar).setupWithNavController(navController, appBarConfiguration)
}
您不需要重写 onSupportNavigationUp
方法,因为 Navigation 会自动处理点击事件。
如果您想自己处理工具栏,也不需要覆盖它。
真的有必要打电话吗
override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
在我的 MainActivity 中?
因为当我在我的 xml 中附加 NavHostFragment 时,它从那里开始,但我看过 Google I/O 讲座,他们用它来制作导航
我的问题
需要用在什么地方?
谢谢
onSupportNavigateUp
来自 AppCompatActivity
。您应该在定义 NavHostFragment
(可能是您的 MainActivity)的同一 activity 中覆盖该方法。您覆盖它,以便 NavigationUI
可以正确支持向上导航甚至抽屉布局菜单。 AppCompatActivity
和 NavigationUI
是两个独立的组件,因此您重写该方法以连接两者。请注意,如果您使用导航组件设置工具栏,即,如果您执行类似于
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
// ...
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
findViewById<Toolbar>(R.id.toolbar).setupWithNavController(navController, appBarConfiguration)
}
您不需要重写 onSupportNavigationUp
方法,因为 Navigation 会自动处理点击事件。
如果您想自己处理工具栏,也不需要覆盖它。