【问题标题】:Android Drawer with Navigation checks wrong menu item带有导航的 Android 抽屉检查错误的菜单项
【发布时间】:2020-07-03 15:01:38
【问题描述】:

我使用带抽屉的导航组件。它以正确的字段开头:

然后我单击任何菜单,它会更改为正确的导航片段:

但如果我点击同一个项目或任何其他项目,它总是会切换到正确的导航片段,但抽屉菜单会将选择重置为第一个元素(第一个屏幕截图)。

这是我初始化抽屉和导航的方式:

setContentView(R.layout.activity_main)
setSupportActionBar(root.toolbar)
val nav_controller = findNavController(R.id.navigation)
appbarCfg = AppBarConfiguration(setOf(
  R.id.nav_group,
  R.id.nav_help,
  R.id.nav_video,
  R.id.nav_settings
), root)
setupActionBarWithNavController(nav_controller, appbarCfg)
root.setStatusBarBackgroundColor(getColor(R.color.lblue))
root.drawer.setupWithNavController(nav_controller)

导航xml:

<?xml version="1.0" encoding="utf-8"?>
<navigation
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/nav_group" <!-- issue was here. -->
  app:startDestination="@id/nav_group"
  >

  <!-- group. -->
  <fragment
    android:id="@+id/nav_group"
    android:name="***.model.fragment.GroupFragment"
    android:label="@string/drawer_navigation_home"
    tools:layout="@layout/fragment_group"
    >

  </fragment>

  <!-- help. -->
  <fragment
    android:id="@+id/nav_help"
    android:name="***.model.fragment.HelpFragment"
    android:label="@string/drawer_navigation_help"
    tools:layout="@layout/fragment_help"
    >

  </fragment>

  <!-- video. -->
  <fragment
    android:id="@+id/nav_video"
    android:name="***.model.fragment.VideoFragment"
    android:label="@string/drawer_navigation_video"
    tools:layout="@layout/fragment_video"
    >

  </fragment>

  <!-- settings. -->
  <fragment
    android:id="@+id/nav_settings"
    android:name="***.model.fragment.SettingsFragment"
    android:label="@string/drawer_navigation_settings"
    tools:layout="@layout/fragment_settings"
    >

  </fragment>

</navigation>

抽屉菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  tools:showIn="navigation_view"
  >

  <group
    android:checkableBehavior="single"
    >

    <item
      android:id="@+id/nav_group"
      android:icon="@drawable/ic_home"
      android:title="@string/drawer_navigation_home"
      />

    <item
      android:id="@+id/nav_help"
      android:icon="@drawable/ic_eye"
      android:title="@string/drawer_navigation_help"
      />

    <item
      android:id="@+id/nav_video"
      android:icon="@drawable/ic_camera"
      android:title="@string/drawer_navigation_video"
      />

    <item
      android:id="@+id/nav_settings"
      android:icon="@drawable/ic_gear"
      android:title="@string/drawer_navigation_settings"
      />

  </group>

</menu>

【问题讨论】:

  • 使用appbarCfg = AppBarConfiguration(......, drawerLayout)
  • @GabrieleMariotti root 是 Kotlin 为我的 DrawerLayout 合成的。
  • 哎呀,对不起!

标签: android navigation-drawer android-architecture-navigation


【解决方案1】:

解决了。问题在于 id 冲突。当我有具有相同 id 的片段时,我的导航 xml 有 id="@+id/nav_group"。

【讨论】:

    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2015-07-22
    • 2017-05-05
    相关资源
    最近更新 更多