使用 Android Jetpack 从导航抽屉导航
Navigating from navigational drawer using Android Jetpack
我正在尝试在我的 android 应用程序上实现 Jetpack 导航。我创建了一个导航图,如下所示:
和导航抽屉菜单xml如下所示:
根据 android 开发者网站中的文档,here
为菜单项提供与片段或目的地相同的 ID 应该足以确保单击菜单项将我导航到指定的片段。这似乎不起作用,我是否遗漏了什么?
根据docs,有一段代码你需要做:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
NavigationUI.setupWithNavController(navigationView, navController);
或在科特林中:
val navigationView = findViewById(R.id.nav_view)
navigationView.setupWithNavController(navController)
这是我添加到我的一个片段的 onCreate 中以使其工作的一段代码。我最初尝试在我的 MainActivity 上执行此操作但没有成功。
val navigationView = activity?.findViewById<NavigationView>(R.id.nav_view)
val navController = findNavController(this)
navigationView?.let { NavigationUI.setupWithNavController(it, navController) }
要使用 NavigationUI#setupWithNavController(),您需要:
实施'android.arch.navigation:navigation-ui:1.0.0-alpha02'
我认为标准的自定义解决方案更好,因为您可以使用导航图或自己处理不同的菜单项(例如注销项)
override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here.
when (item.itemId) {
R.id.navSignOut -> {
loginViewModel.logout()
}
else -> {
val navController = findNavController(R.id.main_nav_host_fragment)
navController.navigate(item.itemId)
}
}
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
@Dracarys 你应该用
implementation "android.arch.navigation:navigation-ui-ktx:1.0.0-alpha04"
而不是
implementation "android.arch.navigation:navigation-ui:1.0.0-alpha04"
如果您使用的是 Kotlin,请注意 -ktx 部分。然后你会看到navigationView.setupWithNavController(navController)
方法
[UPD 1]
此外,当我通过调用 findNavController(view)
获取 navController 时,我也遇到了同样的问题。尝试使用 findNavController(activity, id)
并将其传递给 setupWithNavController(navController)
方法。现在对我有用
我正在尝试在我的 android 应用程序上实现 Jetpack 导航。我创建了一个导航图,如下所示:
和导航抽屉菜单xml如下所示:
根据 android 开发者网站中的文档,here
为菜单项提供与片段或目的地相同的 ID 应该足以确保单击菜单项将我导航到指定的片段。这似乎不起作用,我是否遗漏了什么?
根据docs,有一段代码你需要做:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
NavigationUI.setupWithNavController(navigationView, navController);
或在科特林中:
val navigationView = findViewById(R.id.nav_view)
navigationView.setupWithNavController(navController)
这是我添加到我的一个片段的 onCreate 中以使其工作的一段代码。我最初尝试在我的 MainActivity 上执行此操作但没有成功。
val navigationView = activity?.findViewById<NavigationView>(R.id.nav_view)
val navController = findNavController(this)
navigationView?.let { NavigationUI.setupWithNavController(it, navController) }
要使用 NavigationUI#setupWithNavController(),您需要:
实施'android.arch.navigation:navigation-ui:1.0.0-alpha02'
我认为标准的自定义解决方案更好,因为您可以使用导航图或自己处理不同的菜单项(例如注销项)
override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here.
when (item.itemId) {
R.id.navSignOut -> {
loginViewModel.logout()
}
else -> {
val navController = findNavController(R.id.main_nav_host_fragment)
navController.navigate(item.itemId)
}
}
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
@Dracarys 你应该用
implementation "android.arch.navigation:navigation-ui-ktx:1.0.0-alpha04"
而不是
implementation "android.arch.navigation:navigation-ui:1.0.0-alpha04"
如果您使用的是 Kotlin,请注意 -ktx 部分。然后你会看到navigationView.setupWithNavController(navController)
方法
[UPD 1]
此外,当我通过调用 findNavController(view)
获取 navController 时,我也遇到了同样的问题。尝试使用 findNavController(activity, id)
并将其传递给 setupWithNavController(navController)
方法。现在对我有用