Android Create a simple menu programmatically

后端 未结 5 926
遥遥无期
遥遥无期 2021-02-01 12:36

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

相关标签:
5条回答
  • 2021-02-01 12:53

    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.

    0 讨论(0)
  • 2021-02-01 12:56

    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.

    0 讨论(0)
  • 2021-02-01 12:57

    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();
            }
        });
    
    0 讨论(0)
  • 2021-02-01 13:02

    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);
    
    0 讨论(0)
  • 2021-02-01 13:16

    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);
    }
    
    0 讨论(0)
提交回复
热议问题