我遇到有关Menus和MenuItems的问题。每当我点击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>
答案 0 :(得分:5)
您没有为菜单项分配任何ID,因此Android无法识别它们并返回0.
如果您需要商品ID,则需要通过android:id
属性提供
<item android:id="@+id/AccountStuff"
android:title="@string/menu_switch_account"/>
答案 1 :(得分:2)
之前的答案是正确的,但如果您使用 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返回零的问题。 现在我的方法返回正确的id
@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);
}