2

这是我定义菜单的 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)。如果我在 XMLlocate之后移动,将为空。在 Java 中分配三个变量的顺序无关紧要。favoritefavorite

我很困惑。我错过了什么?

4

2 回答 2

0

您可以尝试像这样投射您的对象:

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

Nervetheless,如果你想对这个项目执行操作,你也可以覆盖方法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; 
            }
    }
于 2013-05-14T22:28:47.170 回答
0

我调用了错误的菜单资源。我不明白这会如何导致问题,但我没有抱怨。

于 2013-05-16T02:44:48.440 回答