动态地将一个项目添加到PopupMenu的组中

3
我有一个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>

我想要向orders_filter_messages_group添加一些内容,所以我进行了以下操作:

this.filterMenu = new PopupMenu(this.getActivity(), this.getActivity().findViewById(R.id.orders_filter_button));
this.filterMenu.inflate(R.menu.popup_orders_filter);

for (Channel channel : channels)
    this.filterMenu.getMenu().add(R.id.orders_filter_messages_group, Menu.NONE, Menu.NONE, channel.getName());

结果是项目已成功添加到弹出菜单中,但是它们被添加到列表的末尾(组外),因此无法选中。
如果我更改顺序参数,我可以将它们定位在正确的位置,但它们仍然在组外,并且保持不可选状态。
1个回答

3
getMenu().add() 方法返回一个 MenuItem 对象。通过这个对象你可以完全控制... 试一下:
MenuItem addedMenuItem = this.filterMenu.getMenu().add(R.id.orders_filter_messages_group, Menu.NONE, Menu.NONE, channel.getName());
addedMenuItem.setCheckable(true);

在PopupMenu的onClickListener中访问它,将唯一的ID添加到add()方法中,而不是使用Menu.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_filter_messages_group, true, false); - Greelings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接