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

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

问题描述:

我试图用一个按钮来创建一个简单的菜单,该按钮将调用清除该数组的方法。我不想使用xml,因为我需要的只是一个按钮。Android以编程方式创建一个简单的菜单

事情是这样的 -

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

谢谢

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

我也喜欢这个。绝对要在将来使用 – Shmuel 2013-03-03 22:26:52

+1

+1,但是:在Android 4上?编译器错误,因为break语句后返回。我会尽力编辑它,完成 – 2013-04-09 08:03:30

+0

谢谢,错过了。 – Paul 2013-04-09 20:30:20

像这样的东西可能会奏效:

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并覆盖它的onMenuItemClick()以完成我们想要的操作。

+0

很好用;)谢谢 – Shmuel 2013-03-03 22:24:35

+0

@大卫没问题。既然你只需要一个按钮(就像你在你的问题中指定的那样),这很好,并且占用较少的代码。但正如保罗所说,如果你有多个按钮,建议你遵循这种方法。 – 2013-03-03 22:26:24

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

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