3

我正在尝试在我的 android 应用程序上实现喷气背包导航。我创建了一个导航图,如下所示:

图表编辑器的图片

和导航抽屉菜单xml,如下所示:

菜单导航抽屉菜单项设计的图片

根据android开发者网站中的文档,这里

为菜单项提供与片段或目的地相同的 id 应该足以确保单击菜单项会将我导航到指定的片段。这似乎不起作用,我错过了什么吗?

4

5 回答 5

4

@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)方法

[更新 1]

另外,当我通过调用 navController 获取时,我也遇到了同样的问题findNavController(view)。尝试使用findNavController(activity, id)并将其传递给setupWithNavController(navController)方法。它现在对我有用

于 2018-07-28T00:32:22.467 回答
3

根据文档,您需要执行一段代码接线:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
NavigationUI.setupWithNavController(navigationView, navController);

或在科特林:

val navigationView = findViewById(R.id.nav_view)
navigationView.setupWithNavController(navController)
于 2018-06-03T10:53:47.857 回答
1

要使用 NavigationUI#setupWithNavController() 您需要:

实现 'android.arch.navigation:navigation-ui:1.0.0-alpha02'

于 2018-06-13T15:09:23.293 回答
1

我认为标准的自定义解决方案更好,因为您可以使用导航图或您自己处理不同的菜单项(例如退出项)

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
    }
于 2018-07-13T12:57:42.860 回答
0

这是我添加到我的片段的 onCreate 中以使其工作的一段代码。我最初尝试在我的 MainActivity 上这样做,但没有成功。

val navigationView = activity?.findViewById<NavigationView>(R.id.nav_view)
val navController = findNavController(this)
navigationView?.let { NavigationUI.setupWithNavController(it, navController) }
于 2018-06-11T08:53:05.147 回答