我有一个用于排序的菜单项。当用户单击该按钮时,将创建一个带有排序选项的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;


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

10-08 02:59