如何在导航视图中取消选中选中的项目?

Haf*_*ari 31 android navigationview android-navigationview

我知道可以通过调用setCheckedItem()或返回true值来突出显示导航视图项目onNavigationItemSelected以将项目显示为所选项目,但是如何取消选中导航视图的选中项目?

ars*_*ent 52

这将取消选中项目:

    int size = mNavigationView.getMenu().size();
    for (int i = 0; i < size; i++) {
        mNavigationView.getMenu().getItem(i).setCheckable(false);
    }
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,使用你的技术后,我检查了最后一项,我无法解决它.请帮我... (4认同)

Joa*_*usa 31

我看到@arsent解决方案并尝试了一下,它确实会做你想要的,即取消选择所有项目......但是,我在以下场景中遇到了问题:

  1. 选择菜单项1(使用NavigationView#setCheckedItem)
  2. 根据@ arsent的解决方案取消选择所有项目
  3. 再次选择菜单项1(使用NavigationView#setCheckedItem)

在这种情况下,第1项不会被标记为已选中.这是因为在内部导航视图跟踪在步骤1中先前选择的项目集,该项目在步骤2中没有变化,并且它只是跳过步骤3,因为先前选择的项目与我们现在选择的项目相同.

我的建议(和另一种解决方案)避免这种情况只是有一个虚拟的隐形物品,并且NavigationView#setCheckedItem只要你想取消全部选择就用它来选择那个项目,就像这样

<item
    android:id="@+id/menu_none"
    android:title=""
    android:visible="false"/>
Run Code Online (Sandbox Code Playgroud)

要取消所有选择

mNavigationView.setCheckedItem(R.id.menu_none);
Run Code Online (Sandbox Code Playgroud)

  • 我发现我还必须让菜单项`checkable="true"` 才能工作,但是一旦我这样做了,它就完美了! (2认同)

Rah*_*hul 18

要取消选中所有MenuItems包含SubMenu您必须使用递归的项目 -

    private void unCheckAllMenuItems(@NonNull final Menu menu) {
        int size = menu.size();
        for (int i = 0; i < size; i++) {
            final MenuItem item = menu.getItem(i);
            if(item.hasSubMenu()) {
                // Un check sub menu items
                unCheckAllMenuItems(item.getSubMenu());
            } else {
                item.setChecked(false);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

调用以上方法取消选中所有项目,如下所示 -

unCheckAllMenuItems(navigationView.getMenu());
Run Code Online (Sandbox Code Playgroud)

  • 值得投票,因为它提到了子菜单 (3认同)

Jac*_*ack 6

只是让你的物品不可检查

<item
    android:id="@+id/profile_item"
    android:checkable="false"
    android:title="@string/profile"/>
Run Code Online (Sandbox Code Playgroud)