gpt4 book ai didi

android - 菜单项 setChecked() 不工作

转载 作者:行者123 更新时间:2023-11-29 00:09:48 24 4
gpt4 key购买 nike

我有一个用于排序的菜单项。当用户单击它时,将创建一个带有排序选项的 PopupMenu。

现在我已经为每个项目创建了 RadioButtons,但似乎无法将选定的单选按钮设置为选中状态。我不知道出了什么问题。

这是我的 menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group
android:id="@+id/group"
android:checkableBehavior="single">
<item
android:id="@+id/fileName"
android:title="Name" />

<item
android:id="@+id/fileDate"
android:title="Date" />

</group>

</menu>

这就是我在 onOptionsItemSelected() 中的内容

if (id == R.id.sort) {

final PopupMenu popupMenu = new PopupMenu(getActivity(), view);
popupMenu.getMenuInflater().inflate(R.menu.sort_menu, popupMenu.getMenu());

popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

public boolean onMenuItemClick(MenuItem item) {

int id = item.getItemId();

if (id == R.id.fileName) {
sortOrder = 0;

} else if (id == R.id.fileDate) {
sortOrder = 1;

} else if (id == R.id.fileSizeInc) {
sortOrder = 2;

} else if (id == R.id.fileSizeDec) {
sortOrder = 3;

}

item.setChecked(!item.isChecked());

return true;
}
});

popupMenu.show();

}

谁能帮我解决一下?

更新

我从@gfpacheco 的回答中意识到错误。我需要在显示弹出菜单之后而不是之前执行此操作。但问题是我如何才能获得特定的单击 MenuItem,以便我可以在回调之外以编程方式检查它?

最佳答案

首先,您应该有一个字段来保存当前排序顺序,可能带有默认值。

其次,在调用 popupMenu.show() 之前,您应该设置相应的单选按钮选中状态:

MenuItem menuItem;
switch (sortOrder) {
case 0:
menuItem = popupMenu.getMenu().findItem(R.id.menu_item_0);
break;
case 1:
menuItem = popupMenu.getMenu().findItem(R.id.menu_item_1);
break;
case 2:
menuItem = popupMenu.getMenu().findItem(R.id.menu_item_2);
break;
}
menuItem.setChecked();

第三,更新菜单点击回调中当前排序顺序的值:

sortOrder = newSortOrder;

这样,当再次打开弹出窗口时,第二步将确保已经检查了当前排序顺序。

关于android - 菜单项 setChecked() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31129049/

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