2013-03-03 8 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

+1

+1、しかし:アンドロイド4?コンパイルエラー、return after break文のためです。私はそれを編集しようとします –

+0

ありがとう、それを逃した。 – Paul

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は私たちにあなたがのMenuItemを追加することができます便利な方法、add()を与えます。だから私たちは1つを作る。 次にMenuItemOnMenuItemClickListenerを割り当て、私たちがしたいことをするためにonMenuItemClick()を上書きします。

+0

完璧;)ありがとう – Shmuel

+0

@David問題はありません。あなたの質問に指定されているように、ボタンが1つだけ必要なので、これは問題ありません。しかし、Paulが言ったように、複数のボタンがある場合は、その方法に従うことをお勧めします。 –

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); 
} 
関連する問題