导航组件 - onSupportNavigateUp()

SNM*_*SNM 4 android android-fragments kotlin android-navigation android-architecture-navigation

真的有必要打电话吗

override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
Run Code Online (Sandbox Code Playgroud)

在我的 MainActivity 中?

因为当我在我的 xml 中附加 NavHostFragment 时,它从那里开始,但是我看过 Google I/O 讲座,他们使用它来作为导航的起点

我的问题

哪里有必要使用它?

谢谢

Ric*_*ira 6

onSupportNavigateUp来自AppCompatActivity. 您应该在定义您的NavHostFragment(可能是您的 MainActivity)的同一活动中覆盖该方法。您可以覆盖它,以便NavigationUI可以正确支持向上导航甚至抽屉布局菜单。AppCompatActivityNavigationUI是两个独立的组件,因此您可以重写该方法以连接两者。请注意,如果您使用导航组件设置工具栏,即,如果您执行类似于

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)
}
Run Code Online (Sandbox Code Playgroud)

您不需要覆盖该onSupportNavigationUp方法,因为 Navigation 会自动处理点击事件。

如果您想自己处理工具栏,您也不需要覆盖它。

  • 我们如何在 Fragment 而不是主 Activity 中设置它? (3认同)