Android以编程方式创建一个简单的菜单

时间:2013-03-03 22:14:16

标签: android menu

我正在尝试使用一个按钮创建一个简单的菜单,该按钮将调用方法来清除数组。我不想使用xml,因为我只需要一个按钮。

像这样 -

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

谢谢

5 个答案:

答案 0 :(得分:68)

A - C的方法有效,但您应该避免手动设置点击侦听器。特别是当你有多个菜单项时。

我更喜欢这种方式:

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

通过使用这种方法,您可以避免创建不必要的对象(侦听器),并且我也发现此代码更易于阅读和理解。

答案 1 :(得分:26)

这样的事可能有用:

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为我们提供了一个方便的方法add(),允许您添加MenuItem。所以我们制作一个。 然后我们将OnMenuItemClickListener分配给MenuItem并覆盖其onMenuItemClick()以执行我们希望它执行的操作。

答案 2 :(得分:15)

以编程方式,我能够使用以下代码创建一个简单的菜单。

def cached_author
  Rails.cache.fetch("#{author_id}/info", expires_in: 12.hours) do
    author
  end
end

答案 3 :(得分:1)

在这里,我使用点击侦听器动态实现了弹出菜单。

<div class="checkbox">
    @foreach($option->subspecifications as $suboption)

        @if($option->title == 'Brand')
            <label for="brands">
            <input name="brands[]" type="checkbox" value="{{$suboption->id}}">
            {{ucfirst($suboption->title)}}
            </label>
        @else
            <label for="suboptions">
            <input name="suboptions[]" type="checkbox" value="{{$suboption->id}}">
            {{ucfirst($suboption->title)}}
            </label>
        @endif

    @endforeach
</div>

答案 4 :(得分:1)

如果您要查找带有回调的生成的弹出项目,请使用此功能。

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>

示例

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