Tom*_*mas 6 checkbox android popupmenu
我有这个简单的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();
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
屏幕

首先,您可以将 if check else 语句简化为
\n\nitem.setChecked(!item.isChecked())\nRun Code Online (Sandbox Code Playgroud)\n\n这样它总是会从 true \xe2\x86\x92 false 切换它,反之亦然。
\n\n但问题在于你有单选按钮,上面的语句所做的是进行检查group,但你想要的是进行检查item。
要获得您正在寻找的行为,您可以使用item.getSubmMenu()setChecked 方法,然后对您想要的特定子菜单项使用 setChecked 方法。
例如:
\n\n//This will refer to the default, ascending or descending item.\nMenuItem subMenuItem = item.getSubMenu().getItem(INDEX_OF_ITEM); \n//Check or uncheck it.\nsubMenuItem.setChecked(!subMenuItem.isChecked());\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
9146 次 |
| 最近记录: |