MenuItem.getItemId возвращает 0 вместо ItemId - PullRequest
2 голосов
/ 13 апреля 2011

У меня проблемы с меню и пунктами меню. Всякий раз, когда я нажимаю MenuItem, item.getItemId() всегда возвращает 0. Кто-нибудь знает почему?

public class MenuAct extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.event_activity, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Log.d("event", "ItemSelected=" + item.getItemId());// always 0
    return true;
}

}

/res/menu/event_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:name="@+id/evt_createEvent"
    android:title="1" />
<item
    android:name="@+id/menu_evt_abortCreate"
    android:title="2" />
<item
    android:name="@+id/menu_evt_saveChanges"
    android:title="3" />
<item
    android:name="@+id/menu_evt_deleteEvent"
    android:title="4" />
</menu>

Ответы [ 2 ]

5 голосов
/ 13 апреля 2011

Вы не назначаете никакие идентификаторы для своих пунктов меню, поэтому Android не может их узнать и возвращает 0.

Если вам нужен идентификатор элемента, вам нужно предоставить его с помощью атрибута android:id:

<item android:id="@+id/AccountStuff"
      android:title="@string/menu_switch_account"/>
2 голосов
/ 07 июня 2012

Предыдущие ответы верны, но если вы используете Eclipse , возможно, этого недостаточно. Пожалуйста, отредактируйте ваши файлы menu.xml, используя вкладку «Макет» редактора

Тогда ваш не рабочий файл

<menu xmlns:android="https://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="@string/button_exit" android:visible="true" android:enabled="true" android:id="@+id/exitmenu"></item>
</menu>

станет

<menu xmlns:android="https://schemas.android.com/apk/res/android" xmlns:android1="http://schemas.android.com/apk/res/android">
    <item android1:title="@string/button_exit" android1:visible="true" android1:enabled="true" android1:id="@+id/exitmenu"></item>

</menu>

Возможно, это где-то следствие внутренней ошибки. Таким образом, вы должны использовать вкладку макета, чтобы сделать это, иначе у вас по-прежнему будет такая проблема с getItemId, возвращающим ноль. Теперь мой метод возвращает правильный идентификатор

@Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {       
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.exitmenu:
                finish();//Close the app
                return true;                
        }
        return super.onMenuItemSelected(featureId, item);
    }
...