2011-04-13 45 views
2

我对Menus和MenuItems有问题。每当我点击一个MenuItemitem.getItemId()总是返回0.有谁知道为什么?MenuItem.getItemId返回0而不是ItemId

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> 

回答

5

您还没有给予任何标识你的菜单项,因此Android无法知道他们返回0

如果你需要的项目ID,您需要通过android:id属性提供:

<item android:id="@+id/AccountStuff" 
     android:title="@string/menu_switch_account"/> 
+0

awwwwwwww CR * P .... – 2011-04-13 09:58:41

+0

或者像谢尔顿将它说对我的脸,“Bazinga!” – 2011-04-13 09:59:25

+0

多数民众赞成混淆,getItemId返回一个int,如果我设置一个字符串ID将如何工作? – yehyatt 2016-11-21 10:53:40

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); 
    }