Android Создание простого меню программно
Я пытаюсь создать простое меню с помощью одной кнопки, которая вызовет метод очистки массива. Я не хочу использовать xml, потому что мне нужна только одна кнопка.
Что-то вроде этого -
public boolean onCreateOptionsMenu(Menu menu) {
button "Clear Array";
onClick{// run method that wipes array};
return true;
}
Спасибо
Ответы
Ответ 1
Используется метод 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;
}
}
Используя этот подход, вы избегаете создания ненужных объектов (слушателей), и я также считаю, что этот код легче читать и понимать.
Ответ 2
Что-то вроде этого может работать:
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()
, чтобы сделать то, что мы хотим.
Ответ 3
Программно, я смог создать простое меню, используя следующий код.
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);
}