Android Create a simple menu programmatically

AndroidMenu

Android Problem Overview


I'm trying to create a simple menu with one button that will call a method to clear the array. I don't want to use xml because all I need is one button.

Something like this -

public boolean onCreateOptionsMenu(Menu menu) {
    button "Clear Array";
    onClick{// run method that wipes array};
    return true;
}

Thank you

Android Solutions


Solution 1 - Android

A--C's method works, but you should avoid setting the click listeners manually. Especially when you have multiple menu items.

I prefer this way:

private static final int MENU_ITEM_ITEM1 = 1;
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(Menu.NONE, MENU_ITEM_ITEM1, Menu.NONE, "Item name");
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_ITEM_ITEM1:
        clearArray();
        return true;

    default:
        return false;
  }
}

By using this approach you avoid creating unecessary objects (listeners) and I also find this code easier to read and understand.

Solution 2 - Android

Something like this might work:

public boolean onCreateOptionsMenu(Menu menu) {
  MenuItem item = menu.add ("Clear Array");
  item.setOnMenuItemClickListener (new OnMenuItemClickListener(){
    @Override
    public boolean onMenuItemClick (MenuItem item){
      clearArray();
      return true;
    }
  });
  return true;
}

Menu gives us a handy method, add(), which allows you to add a MenuItem. So we make one. Then we assign an OnMenuItemClickListener to the MenuItem and override its onMenuItemClick() to do what we want it to do.

Solution 3 - Android

Programmatically, I was able to create a simple menu using the following code.

private final int MenuItem_EditId = 1, MenuItem_DeleteId = 0;

@Override
  public boolean onCreateOptionsMenu(Menu menu){

	MenuItem edit_item = menu.add(0, MenuItem_EditId, 0, R.string.edit);
	edit_item.setIcon(R.drawable.edit);
	edit_item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);

    MenuItem delete_item = menu.add(0, MenuItem_DeleteId, 1, R.string.edit);
	delete_item.setIcon(R.drawable.delete);
	delete_item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
	
	return super.onCreateOptionsMenu(menu);
}

Solution 4 - Android

Here i implemented popup menu dynamically by using a click listener.

    Dynamic_PopUpMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu menu = new PopupMenu(DialogCheckBox.this, v);
            menu.getMenu().add("AGIL");  // menus items
            menu.getMenu().add("Dash");  // menus items
            menu.getMenu().add("AGILarasan");
            menu.getMenu().add("Arasan");
            menu.show();
        }
    });

Solution 5 - Android

If you're looking for generated popup items with callbacks, used this.

Java

public static void popupMenu(final Context context, View anchor, final LinkedHashMap<String,IPopupMenu> options){
        PopupMenu popupMenu = new PopupMenu(context, anchor);
        for(String key : options.keySet()){
            popupMenu.getMenu().add(key);
        }
        popupMenu.getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu());
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {

                options.get(menuItem.getTitle()).onClick();
                return true;
            }
        });

        popupMenu.show();
    }

public interface IPopupMenu{
        void onClick();
    }

XML

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

</menu>

Example

LinkedHashMap<String,IPopupMenu> menu_items = new LinkedHashMap<>();
menu_items.put("Item Name", new Utils.IPopupMenu() {
         @Override
         public void onClick() {
            //do your code
         }
});
menu_items.put("Clear Array", new Utils.IPopupMenu() {
         @Override
         public void onClick() {
            //clear array
         }
});

popupMenu(context,button,menu_items);

Solution 6 - Android

In Kotlin you can dynamically add a menu item like this:

class MyFragment : MyBasicFragment() {
    companion object {
        const val MENU_ITEM_ID_UPDATE = 0
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        // consider you have called 'inflater.inflate(R.menu.app_bar_menu, menu)' in the MyBasicFragment
        super.onCreateOptionsMenu(menu, inflater)

        menu.add(0, MENU_ITEM_ID_UPDATE, 0, R.string.menu_item_update).apply {
            setIcon(R.drawable.ic_baseline_refresh_24)
            setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
        }
    }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShmuelView Question on Stackoverflow
Solution 1 - AndroidPaulView Answer on Stackoverflow
Solution 2 - AndroidA--CView Answer on Stackoverflow
Solution 3 - AndroidVikasView Answer on Stackoverflow
Solution 4 - AndroidAgilanbuView Answer on Stackoverflow
Solution 5 - AndroidNJY404View Answer on Stackoverflow
Solution 6 - AndroidJames BondView Answer on Stackoverflow