这是我定义菜单的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
之后移动favorite
,favorite
将为空。在Java中分配三个变量的顺序无关紧要。
我很沮丧。我错过了什么?
答案 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)
我正在调用错误的菜单资源。我不知道这会怎样造成这个问题,但我不是在抱怨。