如何在 NavigationDrawer 中正确地将项目标记为选中?

How do I correctly mark an item as selected in the NavigationDrawer?

我的应用程序中有一个导航抽屉。 NavigationDrawer 列表中的每个条目代表一个导航图。我想标记用户当前所在的元素

我设法让项目在被选中后被标记,直到可见片段发生变化(即使新片段仍在同一个 navGraph 中)。我通过使用 NavigationView.setNavigationItemSelectedListener(NavigationView.OnNavigationItemSelectedListener listener) 设置 NavigationItemSelectedListener 来做到这一点。在这个 listeners onNavigationItemSelected(item: MenuItem): Boolean 函数中,我做的是:item.isChecked = true.

问题在于应用程序启动后该项目未被选中,并且一旦片段更改(即使 navGraph 未更改),该项目就会失去其选中状态。我该如何正确执行此操作?

我还尝试在应用程序启动时要检查的菜单项的 xml 声明中设置 android:checked="true"。它似乎没有做任何事情。
我还尝试在 Activity 的 onCreate 函数中设置 navView.setCheckedItem(R.id.main_nav_option_one)。同样,它似乎没有做任何事情。

你能试试吗

        navView.getMenu().getItem(index).setChecked(true)

在片段的 onResume 中?

我设法解决了我的问题。

提到了我必须做出的最重要的改变 here。我必须为我的菜单项提供与 navGraphs 相同的 ID。当我这样做时,我删除了 NavigationItemSelectedListener 因为它干扰了自动生成的导航。如果没有 NavigationItemSelectedListener,我将无法再处理被单击的导航项,因为它在 navGraph 中没有对应的元素。但是我能够修复它,方法是重新添加 NavigationItemSelectedListener,并对列表中的每个元素正确调用 NavController.navigate()

长话短说:
我必须将菜单项 ID 设置为与我的 navGraph ID 相同,并在 NavigationItemSelectedListener.

中自行调用导航