我正在尝试使用一个按钮创建一个简单的菜单,该按钮将调用方法来清除数组。我不想使用xml,因为我只需要一个按钮。
像这样 -
public boolean onCreateOptionsMenu(Menu menu) {
button "Clear Array";
onClick{// run method that wipes array};
return true;
}
谢谢
答案 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);