Разница между "onMenuItemSelected" и "onOptionsItemSelected"
может кто-нибудь объяснить мне разницу между:
onMenuItemSelected (int featureId, MenuItem item)
http://developer.android.com/reference/android/app/Activity.html#onMenuItemSelected%28int,%20android.view.MenuItem%29
и
onOptionsItemSelected (MenuItem item)
http://developer.android.com/reference/android/app/Activity.html#onOptionsItemSelected%28android.view.MenuItem%29
в Android? Я нашел учебник, который кто-то переопределяет оба метода.
// Reaction to the menu selection
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case R.id.insert:
createTodo();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.insert:
createTodo();
return true;
}
return super.onOptionsItemSelected(item);
}
Источник: http://www.vogella.de/articles/AndroidSQLite/article.html
Ответы
Ответ 1
Android знает о нескольких типах меню (например, меню опций и контекстное меню). onMenuItemSelected
- это общий обратный вызов. Вам не нужно использовать это обычно. onOptionsItemSelected
является обратным вызовом меню опций, а onContextItemSelected
является обратным вызовом контекстного меню. Вместо этого используйте эти два конкретных.
Ответ 2
Используя ADT 17 (версия 4.2), обратный вызов onOptionsItemSelected
позволит пользователю получить доступ к опциям меню из любого контекста, включая кнопку меню и панель действий. Начиная с версии 3.0 для Android предпочтительным методом является панель действий, к которой можно получить доступ из onMenuItemSelected
. Если вы разрабатываете приложение, поддерживающее версии 2.3 или ранее, чем onOptionsItemSelected
, вы хотите пойти.
Ответ 3
Если посмотреть на код, onMenuItemSelected можно вызвать с помощью меню параметров (кнопка меню) или нажмите контекстное меню.
В основном это просто переводит клики на другие соответствующие методы.
Посмотрите на код здесь: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/app/Activity.java#2078