使用Android Jetpack从导航抽屉导航

时间:2018-05-22 14:09:45

标签: android kotlin android-jetpack android-architecture-navigation

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

a picture of the Graph editor

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

a picture of the menu navigational drawers menu items design

根据android开发者网站here

中的文档

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

5 个答案:

答案 0 :(得分: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)方法

[UPD 1]

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

答案 1 :(得分:3)

根据docs,您需要执行一段代码连接:

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

或在kotlin:

val navigationView = findViewById(R.id.nav_view)
navigationView.setupWithNavController(navController)

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

val navigationView = activity?.findViewById<NavigationView>(R.id.nav_view)
val navController = findNavController(this)
navigationView?.let { NavigationUI.setupWithNavController(it, navController) }

答案 4 :(得分:0)

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

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
    }