【问题标题】:2 single checkable groups in android menuandroid 菜单中的 2 个单个可检查组
【发布时间】:2016-02-03 01:18:13
【问题描述】:

我在 Android 中有两个组,都具有单一的可检查行为。

<item
    android:id="@+id/sort_item"
    android:title="One">
    <menu>
        <group
            android:id="@+id/menu_group_sort"
            android:checkableBehavior="single">
            <item
                android:id="@+id/nav_sort_new"
                android:title="@string/menu_new" />
            <item
                android:id="@+id/nav_sort_hot"
                android:title="@string/menu_hot" />
            <item
                android:id="@+id/nav_sort_top"
                android:title="@string/menu_top" />
        </group>
    </menu>
</item>

<item
    android:id="@+id/filter_item"
    android:title="Two">
    <menu>
        <group
            android:id="@+id/menu_group_filter"
            android:checkableBehavior="single">
            <item
                android:id="@+id/nav_category_all"
                android:title="@string/menu_all" />
            <item
                android:id="@+id/nav_category_business"
                android:title="@string/menu_business" />
            <item
                android:id="@+id/nav_category_technology"
                android:title="@string/menu_technology" />
            <item
                android:id="@+id/nav_category_politics"
                android:title="@string/menu_politics" />
        </group>
    </menu>
</item>

我想要的是当您从一个组中选择一个项目时,它在该组中是“单个”。发生的情况是两个组都在共享“选择的内容”,并且根本无法正常工作。

我已阅读有关此的所有其他帖子,但没有一个解决方案(如果有)有效。有人知道吗?这似乎是一个非常基本的事情..

【问题讨论】:

  • 你能把你的代码贴在onOptionsItemSelected(MenuItem item)你设置选中项目的地方吗?我将您的菜单 XML 复制到我的一个应用程序中,添加了以下语句:item.setChecked(true);,它按预期工作——每个组中的项目没有耦合。
  • @qbix 它实际上是在使用NavigationView,所以onNavigationItemSelected。我从不调用 setChecked(true);因为我认为 NavigationView 会自动完成。

标签: android menu


【解决方案1】:

这似乎是 NavigationDrawer(版本 23)中的一个错误,如 this answer 中所述

第 23 版 NavigationView 确实完全改变了 菜单已构建 - 它现在基于 RecyclerView,如中所述 发布 Google+ 帖子的 cmets。

来自 NavigationMenuPresenter 的适配器源代码(它控制 菜单项如何显示和存储),它只出现一个 已选中的项目已保存,并且选中一项不会取消选中其他已选中 项目。

我会在 build.gradle 中一路回到 22.0.0:

com.android.support:design:22.0.0

或者对onNavigationItemSelected(MenuItem item)函数中的选中项进行手动验证。

【讨论】:

  • 你是对的,这是一个错误,但手动设置 menuItem.setChecked(true|false);在 onNavigationItemSelected 不起作用。我会尝试 onDrawerOpened ......你知道我可以如何手动更改选定的样式吗?我什至可能不得不手动将样式应用于正确的项目..
  • 哦,@automation 当我回滚到 23.0.0 时,我能够使用 setChecked(true) 我使用了您的菜单 XML 布局和这个 sn-p:pastebin.com/iXrT936Q
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多