我有一个静态方法InflateToolbarMenu
,该方法接受活动并为其填充菜单项。此方法将在我所有活动的Activity.OnCreateOptionsMenu上调用,以使我可以全局访问菜单。
膨胀后如何获得menu
类型的Imenu
中的所有物品?
我想遍历它们,并将它们全部设置为侦听器。我不想在Activity.OnCreateOptionsMenu中执行此操作,因为这是全局可见工具栏的菜单,该菜单栏在任何活动中的行为均相同。
在我的MenuItemOnMenuItemClickListener中,我使用了switch语句,因此代码看起来不错。
现在我正在做:
public static void InflateToolbarMenu(this AppCompatActivity activity, IMenu menu)
{
activity.MenuInflater.Inflate(Resource.Menu.toolbar_menu_common, menu);
menu.FindItem(Resource.Id.menu_item_1).SetOnMenuItemClickListener(new MenuItemOnMenuItemClickListener());
menu.FindItem(Resource.Id.menu_item_2).SetOnMenuItemClickListener(new MenuItemOnMenuItemClickListener());
...
menu.FindItem(Resource.Id.menu_item_N).SetOnMenuItemClickListener(new MenuItemOnMenuItemClickListener());
}
我想要的是
menu.ForEach(m=>m.SetOnMenuItemClickListener(new MenuItemOnMenuItemClickListener());
答案 0 :(得分:1)
最简单的方法是执行以下操作:
假设有一个IMenu
,名称为Menu
var listMenuItems = new List<IMenuItem>();
for (int i = 0; i < Menu.Size(); i++)
{
listMenuItems.Add(Menu.GetItem(i)); // here you can add them into a list of items if you want
Menu.GetItem(i).SetOnMenuItemClickListener(new MenuItemOnMenuItemClickListener());
}
就您添加的代码的稳定性而言,这是不可能的,因为IMenu没有GetEnumerator
的定义,这意味着它不是通用集合,不能直接循环。