动态地将项目添加到一组 PopupMenu
Add an item to a group of a PopupMenu dynamically
我有一个 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());
结果是项目很好地添加到 PopupMenu 上,但是它们被添加到列表的末尾(在组之外),因此,它们是不可检查的。
如果我更改顺序参数,我可以设法将它们放置在正确的位置,但它们处于组之外并且无法选中。
getMenu().add()
方法returns一个MenuItem。这样你就可以完全控制......
试试这个:
MenuItem addedMenuItem = this.filterMenu.getMenu().add(R.id.orders_filter_messages_group, Menu.NONE, Menu.NONE, channel.getName());
addedMenuItem.setCheckable(true);
要在 PopupMenu 的 onClickListener 中访问它,请在 add() 方法中添加一个唯一 ID,而不是 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;
}
});
希望对您有所帮助!
我有一个 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());
结果是项目很好地添加到 PopupMenu 上,但是它们被添加到列表的末尾(在组之外),因此,它们是不可检查的。
如果我更改顺序参数,我可以设法将它们放置在正确的位置,但它们处于组之外并且无法选中。
getMenu().add()
方法returns一个MenuItem。这样你就可以完全控制......
试试这个:
MenuItem addedMenuItem = this.filterMenu.getMenu().add(R.id.orders_filter_messages_group, Menu.NONE, Menu.NONE, channel.getName());
addedMenuItem.setCheckable(true);
要在 PopupMenu 的 onClickListener 中访问它,请在 add() 方法中添加一个唯一 ID,而不是 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;
}
});
希望对您有所帮助!