Android: действие элемента onCreateOptionsMenu()
У меня есть меню, созданное через:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("Email");
return super.onCreateOptionsMenu(menu);
}
Но я не могу вспомнить, как настроить onclicklistener, чтобы при его выборе я мог запустить свою функцию электронной почты.
4 ответа
Override onOptionsItemSelected(MenuItem item)
, Так было бы как
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
// do whatever
return true;
default:
return super.onOptionsItemSelected(item);
}
}
РЕДАКТИРОВАТЬ:
Так как это набрало так много очков, я должен отметить, что очень хорошо добавлять идентификаторы в опции меню. Хороший способ убедиться, что они всегда уникальны, - определить их в ids.xml
ресурс, который помещен в res/values
папка.
ids.xml
<resources>
<item name="menu_action1" type="id"/>
<item name="menu_action2" type="id"/>
<item name="menu_action3" type="id"/>
</resources>
Затем, когда вы отменяете onCreateOptionsMenu(Menu menu)
Метод, вы можете использовать идентификаторы так:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, R.id.menu_action1, Menu.NONE, R.string.menu_action1);
menu.add(Menu.NONE, R.id.menu_action2, Menu.NONE, R.string.menu_action1);
return true;
}
Override onOptionsItemSelected(MenuItem item)
,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_action1:
// do whatever
return true;
case R.id.menu_action2:
// do whatever
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Причина, по которой вы делаете это Activity
переопределил бы это с опциями меню, но Fragments
Также можно добавлять собственные пункты меню. С использованием ids.xml
обеспечивает уникальность идентификаторов независимо от того, в каком порядке они размещены.
Это не сработает. Вы должны определить идентификаторы для ваших пунктов меню:
public static final int MENU_ADD = Menu.FIRST;
public static final int MENU_DELETE = Menu.FIRST + 1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "Add");
menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, "Delete");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case MENU_ADD:
return true;
case MENU_DELETE:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Из руководства разработчика Android
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.new_game:
newGame();
return true;
case R.id.help:
showHelp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.itemid:
//do cool stuff
break;
}
}