【问题标题】:Android PopupMenu checkable item does not checkAndroid PopupMenu 可勾选项不勾选
【发布时间】:2015-04-22 16:11:44
【问题描述】:

我有这个简单的 PopupMenu,但是当我单击一个项目时,该项目不会被选中。为什么?

在文档中是: 图标菜单(来自选项菜单)中的菜单项不能显示复选框或单选按钮。 单选按钮正在显示,但只有状态没有改变...

Java

public void showSortPopup() {
    View menuItemView = findViewById(R.id.action_sort);
    PopupMenu popup = new PopupMenu(this, menuItemView);
    popup.inflate(R.menu.sort);
    popup.getMenu().findItem(R.id.sort_def).setChecked(true);
    popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {

            switch (item.getItemId()) {
                case R.id.sort_def:
                    sortOrder = CardCursorContract.CardCursor.DEFAULT_SORT;
                    mCardsFragment.setSortOrder(sortOrder);
                    savePref();
                    if (item.isChecked()) item.setChecked(false);
                    else item.setChecked(true);
                    break;
                case R.id.sort_asc:
                    sortOrder = CardCursorContract.CardCursor.ALPHABETICAL_ASC_SORT;
                    mCardsFragment.setSortOrder(sortOrder);
                    savePref();
                    if (item.isChecked()) item.setChecked(false);
                    else item.setChecked(true);
                    break;
                case R.id.sort_desc:
                    sortOrder = CardCursorContract.CardCursor.ALPHABETICAL_DESC_SORT;
                    mCardsFragment.setSortOrder(sortOrder);
                    savePref();
                    if (item.isChecked()) item.setChecked(false);
                    else item.setChecked(true);
                    break;
                default:
                    break;
            }
            return false;
        }
    });
    popup.show();
}

XML 文件

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item android:id="@+id/sort_def"
      android:title="@string/action_sort_def"
      android:orderInCategory="1"
      android:showAsAction="always" />

<item android:id="@+id/sort_asc"
      android:title="@string/action_sort_name"
      android:orderInCategory="2"
      android:showAsAction="always" />

<item
      android:id="@+id/sort_desc"
      android:title="@string/action_sort_name_desc"
      android:orderInCategory="3"
      android:showAsAction="always"/>
</group>

屏幕

【问题讨论】:

    标签: android checkbox popupmenu


    【解决方案1】:

    首先你可以将 if checked else 语句简化为

    item.setChecked(!item.isChecked())
    

    这样它总是会从 true → false 切换它,反之亦然。

    但问题在于你有单选按钮,上面的语句所做的是使group被选中,但你想要的是item被选中。

    要获得您正在寻找的行为,您可以使用item.getSubmMenu(),然后在您想要的特定 subMenuItem 上使用 setChecked 方法。

    例如:

    //This will refer to the default, ascending or descending item.
    MenuItem subMenuItem = item.getSubMenu().getItem(INDEX_OF_ITEM); 
    //Check or uncheck it.
    subMenuItem.setChecked(!subMenuItem.isChecked());
    

    【讨论】:

      【解决方案2】:

      **在每种情况下交换这些行**

      if (item.isChecked()) item.setChecked(false);
                          else item.setChecked(true);
      

      收件人

      if (item.isChecked()) item.setChecked(true);
                          else item.setChecked(false);
      

      【讨论】:

        猜你喜欢
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多