2013-03-03 123 views
30

我試圖用一個按鈕來創建一個簡單的菜單,該按鈕將調用清除該數組的方法。我不想使用xml,因爲我需要的只是一個按鈕。Android以編程方式創建一個簡單的菜單

事情是這樣的 -

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

謝謝

回答

54

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

23

像這樣的東西可能會奏效:

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

12

以編程方式,我能夠使用下面的代碼創建一個簡單的菜單。

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