gpt4 book ai didi

Android PopupMenu可勾选项不勾选

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:10:38 25 4
gpt4 key购买 nike

我有这个简单的 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>

屏幕

enter image description here

最佳答案

首先,您可以将 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());

关于Android PopupMenu可勾选项不勾选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24717981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com