如何在 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
.
中自行调用导航
我的应用程序中有一个导航抽屉。 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
.