【问题标题】:Navigation Drawer item click导航抽屉项目点击
【发布时间】:2020-02-13 15:17:18
【问题描述】:

我有 DrawerLayoutNavigationView。当我点击导航抽屉中的项目时,有两个片段发生了变化,效果很好:

    <fragment
            android:id="@+id/nav_settings"
            android:label="@string/menu_settings"
            tools:layout="@layout/fragment_settings" />

    <fragment
            android:id="@+id/nav_themes"
            android:label="@string/menu_themes"
            tools:layout="@layout/fragment_themes" />

问题是我在抽屉菜单中还有其他几个不是片段的项目,我无法使它们可点击:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:showIn="navigation_view">

    <group
            android:id="@+id/group_1"
            android:checkableBehavior="single">
        <item
                android:id="@+id/nav_settings"
                android:icon="@drawable/ic_keyboard_settings"
                android:title="@string/menu_settings" />
        <item
                android:id="@+id/nav_themes"
                android:icon="@drawable/ic_theme"
                android:title="@string/menu_themes" />
    </group>
    <group android:id="@+id/group_2">
        <item
                android:id="@+id/nav_developer_page"
                android:icon="@drawable/ic_developer_page"
                android:title="@string/menu_developer_page" />
        <item
                android:id="@+id/nav_privacy_policy"
                android:icon="@drawable/ic_privacy_policy"
                android:title="@string/menu_privacy_policy" />
    </group>
</menu>

代码如下:

        setSupportActionBar(toolbar)
        toggle = object : ActionBarDrawerToggle(this, drawer_layout, toolbar, 0, 0) {
            override fun onDrawerClosed(drawerView: View) {
                super.onDrawerClosed(drawerView)
                syncState()
            }

            override fun onDrawerOpened(drawerView: View) {
                super.onDrawerOpened(drawerView)
                syncState()
            }
        }
        toggle.syncState()
        drawer_layout.addDrawerListener(toggle)

        val navController = findNavController(R.id.nav_host_fragment)
        appBarConfiguration = AppBarConfiguration(setOf(
                R.id.nav_settings, R.id.nav_themes, R.id.nav_developer_page), drawer_layout)
        nav_view.setupWithNavController(navController)
        toggle.syncState()

当我设置 NavigationItemSelectedListener 时,它会破坏片段的导航。

如何使这两个项目可点击并调用函数?

【问题讨论】:

    标签: android android-fragments navigation-drawer drawerlayout


    【解决方案1】:

    解决方法是从导航视图中获取菜单项并设置点击监听:

        val signoutMenuItem = binding.nvNavigationDrawerNavigationView.menu.findItem(id.navigation_drawer_menu_sign_out)
        signoutMenuItem.setOnMenuItemClickListener {
            navigationDrawerMainActivityViewModel.signOut()
            true
        }
    

    并且不要在AppBarConfiguration 中包含非片段项目:

        appBarConfiguration = AppBarConfiguration(
            setOf(
                id.drawerFragmentX,
                id.drawerFragmentY,
                //id.navigation_drawer_menu_sign_out <- Do NOT include
            ), drawerLayout
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    

    此解决方案与https://stackoverflow.com/a/59451345/5189200 相同。

    哈维

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多