如何在Xamarin.Android中以编程方式获取所有菜单项?

时间:2019-01-17 05:25:45

标签: android xamarin.android

我有一个静态方法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());

1 个答案:

答案 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的定义,这意味着它不是通用集合,不能直接循环。