简体   繁体   中英

Add menu item programmatically

Hi I would like to add item menu programmatically. I know how to add menu item in XML but how can i achieve this dynamically? I didn't find anything about this in internet... Is it possible at all? I would like to achieve something like this: https://youtu.be/Es5UFII4oak?t=832 (but in JAVA)

You should override OnPrepareOptionsMenu when you want to add the item.

After you click the add button, you should invoke the InvalidateOptionsMenu(); Here is code.

   [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);
        }
    }

Here is layout.


<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>

Here is running Gif.

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM