问题描述
||
我在有关菜单和菜单项方面遇到问题。每当我单击
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>
解决方法
您没有为菜单项分配任何ID,因此Android无法识别它们并返回0。
如果您需要商品ID,则需要通过
android:id
属性提供:
<item android:id=\"@+id/AccountStuff\"
android:title=\"@string/menu_switch_account\"/>
,先前的答案是正确的,但是如果您使用的是Eclipse,可能还不够。
请使用\“ Layout \”编辑器标签编辑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);
}