Java 将项目动态添加到弹出菜单的组中

Java 将项目动态添加到弹出菜单的组中,java,android,menuitem,popupmenu,Java,Android,Menuitem,Popupmenu,我有一个XML菜单: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/orders_filter_messages_group" android:checkableBehavior="all">

我有一个XML菜单

<?xml version="1.0" encoding="utf-8"?>

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

    <group
        android:id="@+id/orders_filter_messages_group"
        android:checkableBehavior="all">

        <item
            android:id="@+id/orders_filter_messages_channel_1"
            android:title="@string/orders_filter_messages_channel_1" />

        <item
            android:id="@+id/orders_filter_messages_channel_2"
            android:title="@string/orders_filter_messages_channel_2" />

        <item
            android:id="@+id/orders_filter_messages_channel_3"
            android:title="@string/orders_filter_messages_channel_3" />

    </group>

</menu>
结果是,这些项很好地添加到了弹出菜单上,但是这些项被添加到了列表的末尾(在组之外),因此,它们是不可检查的

如果我更改order参数,我可以设法将它们放置在正确的位置,但它们不在组中,并且不可选中。

方法
getMenu().add()
返回一个MenuItem。这样你就可以完全控制。。。 试试这个:

MenuItem addedMenuItem = this.filterMenu.getMenu().add(R.id.orders_filter_messages_group, Menu.NONE, Menu.NONE, channel.getName());
addedMenuItem.setCheckable(true);
要在弹出菜单的onClickListener中访问它,请在add()方法中添加一个唯一的ID,而不是
菜单。NONE

final int uniqueID = 12345;
MenuItem addedMenuItem = this.filterMenu.getMenu().add(R.id.orders_filter_messages_group, uniqueID, Menu.NONE, channel.getName());

//and in the onClickListener
filterMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick (MenuItem item) {
                if(item.getItemId() == uniqueID) //TODO
                return false;
            }
        });


希望这对你有帮助

这对我帮助很大!我还发现这一行具有相同的效果:this.filterMenu.getMenu().setGroupCheckable(R.id.orders\u filter\u messages\u group,true,false);
final int uniqueID = 12345;
MenuItem addedMenuItem = this.filterMenu.getMenu().add(R.id.orders_filter_messages_group, uniqueID, Menu.NONE, channel.getName());

//and in the onClickListener
filterMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick (MenuItem item) {
                if(item.getItemId() == uniqueID) //TODO
                return false;
            }
        });