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());
解决方案
最简单的方法是做这样的事情:
假设有一个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
这意味着它不是通用集合,不能直接循环。
推荐阅读
- tree - 具有 1 个构造函数的 SML 多类型二叉树
- sql - 在Oracle的一列数据中随机转换具有unix时间戳的数据
- spring-boot - 如何在 Spring Boot 2 中将“spring.datasource.tomcat”属性绑定到 javax.sql.DataSource 类
- reactjs - Kendo-react-ui TreeList 如何自定义不同层次的单元格?
- javascript - 如何在没有任何动画的情况下默认切换隐藏
- python - 如何从列表中整理出类别中的值以便从 python 中的变量中访问数据?
- java - 使用条件 API 搜索 jsonb 字段
- flutter - 当它显示在聊天应用程序 Flutter 中时,无法使底部文本字段粘在键盘顶部
- xcode - Xcode 科尔多瓦项目 - 豆荚
- kubernetes - Apache Ignite 堆大小推荐