C# 以编程方式添加菜单项

C# 以编程方式添加菜单项,c#,visual-studio,xamarin.android,android-menu,C#,Visual Studio,Xamarin.android,Android Menu,嗨,我想以编程方式添加项目菜单。我知道如何在XML中添加菜单项,但如何动态地实现这一点?我在网上找不到关于这个的任何东西。。。有可能吗?我想实现这样的功能:(但在JAVA中)当您想要添加项目时,应该覆盖onPrepareOptions菜单 单击“添加”按钮后,应调用invalidateOptions菜单()这里是代码 [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]

嗨,我想以编程方式添加项目菜单。我知道如何在XML中添加菜单项,但如何动态地实现这一点?我在网上找不到关于这个的任何东西。。。有可能吗?我想实现这样的功能:(但在JAVA中)

当您想要添加项目时,应该覆盖
onPrepareOptions菜单

单击“添加”按钮后,应调用
invalidateOptions菜单()这里是代码

   [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        EditText menu_item;
        EditText menu_name;
        List<string> list;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);
             menu_item = FindViewById<EditText>(Resource.Id.menu_item);
             menu_name = FindViewById<EditText>(Resource.Id.menu_name);
            Button add = FindViewById<Button>(Resource.Id.button1);

            list= new List<string>();
            add.Click += Add_Click;
        }

        private void Add_Click(object sender, System.EventArgs e)
        {
       //  int item_id=   Integer.ParseInt(menu_item.Text.ToString());
            string menu_name_text = menu_name.Text.ToString();
            list.Add(menu_name_text);

            ApplyChanged();
        }

        public void ApplyChanged()
        {
            InvalidateOptionsMenu();
        }

        public override bool OnPrepareOptionsMenu(IMenu menu)
        {
            menu.Clear();

            foreach (var item in list)
            {
                menu.Add(item);
            }

            return base.OnPrepareOptionsMenu(menu);
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
[活动(标签=“@string/app_name”,Theme=“@style/AppTheme”,MainLauncher=true)]
公共类MainActivity:AppCompativeActivity
{
编辑文本菜单项;
编辑文本菜单名称;
名单;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(这个,savedInstanceState);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.activity_main);
menu_item=findviewbyd(Resource.Id.menu_item);
menu_name=findviewbyd(Resource.Id.menu_name);
按钮添加=FindViewById(Resource.Id.button1);
列表=新列表();
添加.单击+=添加\单击;
}
私有无效添加\单击(对象发送者,System.EventArgs e)
{
//int item_id=Integer.ParseInt(menu_item.Text.ToString());
string menu_name_text=menu_name.text.ToString();
列表。添加(菜单名称\文本);
ApplyChanged();
}
public void ApplyChanged()
{
无效操作菜单();
}
公共覆盖布尔onPrepareOptions菜单(IMenu菜单)
{
menu.Clear();
foreach(列表中的变量项)
{
菜单。添加(项目);
}
返回base.onPrepareOptions菜单(菜单);
}
public override void OnRequestPermissionsResult(int-requestCode,string[]permissions,[GeneratedEnum]Android.Content.PM.Permission[]grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(请求代码、权限、GrantResult);
base.OnRequestPermissionsResult(请求代码、权限、GrantResult);
}
}
这里是布局图


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <EditText
    android:inputType="number"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="id"
    android:id="@+id/menu_item"/>

<EditText
    android:inputType="text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="name"
    android:id="@+id/menu_name"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="add"
        android:id="@+id/button1"
    />

</LinearLayout>

这里是运行Gif


你好。你提到java并链接了一段关于android应用程序的视频。。。你应该首先解释一下你的环境是什么,你的需求和你尝试过什么。然后看看如何提问,否则你的问题可能就结束了。祝你好运感谢此解决方案,但是我如何识别特定菜单项并向其添加一些功能呢?您可以覆盖
公共覆盖bool OnOptionsItemSelected(IMenuItem项)
,若要处理单击项事件,请向其添加一些功能,但您应该判断用户输入的菜单项名称。如果回复有帮助,请将其标记为答案(单击✔ 在这个答案的右上角),它将帮助其他有类似问题的人。