【问题标题】:How do I correctly mark an item as selected in the NavigationDrawer?如何在 NavigationDrawer 中正确地将项目标记为选中?
【发布时间】:2020-05-06 14:26:34
【问题描述】:

我的应用中有一个导航抽屉。 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)。同样,它似乎没有做任何事情。

【问题讨论】:

  • 你检查过this吗?关于使用导航控制器设置导航抽屉
  • 我没有。但现在我有了,我只是有不同的问题。

标签: android navigation-drawer drawerlayout


【解决方案1】:

你可以试试

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

在片段的 onResume 中?

【讨论】:

  • 如何获取片段内的 navView?
【解决方案2】:

我设法解决了我的问题。

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

TL;DR:
我必须将菜单项 ID 设置为与我的 navGraph ID 相同,并在 NavigationItemSelectedListener 中自行调用导航。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多