findItem()为3个菜单项中的1个返回null

时间:2013-05-14 22:09:33

标签: android android-menu

这是我定义菜单的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/search"
        android:icon="@drawable/ic_action_search"
        android:showAsAction="ifRoom"
        android:title="@string/search"/>
    <item
        android:id="@+id/locate"
        android:icon="@drawable/ic_action_locate"
        android:showAsAction="ifRoom"
        android:title="@string/locate"/>
    <item
        android:id="@+id/favorite"
        android:icon="@drawable/ic_action_star"
        android:showAsAction="ifRoom"
        android:title="@string/favorite"/>

</menu>

这里我将菜单项分配给变量(mainMenu是一个在onCreateOptionsMenu()中设置的私有变量):

MenuItem favorite = mainMenu.findItem(R.id.favorite);       
MenuItem search = mainMenu.findItem(R.id.search);
MenuItem locate = mainMenu.findItem(R.id.locate);

这导致两个变量被分配标识符,一个变量被分配null。在所有情况下,null变量对应于XML文件中第二个定义的菜单项 (在本例中为locate)。如果我在XML中locate之后移动favoritefavorite将为空。在Java中分配三个变量的顺序无关紧要。

我很沮丧。我错过了什么?

2 个答案:

答案 0 :(得分:0)

您可以尝试将对象转换为:

MenuItem favorite = (MenuItem)mainMenu.findItem(R.id.favorite); 

无神论,如果您想对这些项目执行操作,您还可以覆盖方法onOptionsItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.search:
        // stuff
        break;
    case R.id.locate:
                   //stuff
         break;
    case R.id.favorite:
                   //stuff
         break;
   default:
        break; 
            }
    }

答案 1 :(得分:0)

我正在调用错误的菜单资源。我不知道这会怎样造成这个问题,但我不是在抱怨。