finditem()找不到菜单,卡住了NullPointerException

时间:2012-10-18 02:54:30

标签: android android-layout android-menu

我在onCreateOptionsMenu()的选项菜单上更改了一些属性时遇到了问题。似乎findItem()返回null,即使我非常确定对菜单项的引用是正确的。我的代码如下:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_profile, menu);
        MenuItem leftie = menu.findItem(R.id.menu_profile);
        leftie.setIcon(R.drawable.ic_menu_mapmode);
        leftie.setTitle(R.string.back_map);
        leftie.setIntent(authIntent);

        return true;
    }

我真的不知道那里有什么不对。在此先感谢:)

编辑:我忘了包含实际问题。

4 个答案:

答案 0 :(得分:3)

您可以在XML中提及该菜单项的标题和图像。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/newsItem"
    android:icon="@drawable/news_tab"
    android:title="@string/menu_news"/>

<item
    android:id="@+id/dryiceItem"
    android:icon="@drawable/dryice_tab"
    android:title="@string/menu_dryice"/>

</menu>

并且可以像这样在menuItem上设置意图:

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

    case R.id.newsItem:
        // start News activity
        //write your intent here.
        break;
    case R.id.dryiceItem:
                   //start another activity
                   //write your intent here.
         break; 
            }
    }

答案 1 :(得分:1)

我明白了。引用menu索引的字符串R.menu.activity_profile是错误的路径,因此它正在为一个空菜单充气。我将字符串更改为R.menu.layout,现在它按预期工作。

System.out.println(menu.size());
MenuItem leftie = menu.findItem(R.id.menu_profile);
System.out.println(leftie);
leftie.setIcon(R.drawable.ic_menu_mapmode);
leftie.setTitle(R.string.back_map);
leftie.setIntent(authIntent);

答案 2 :(得分:0)

当我的子菜单没有正确嵌套在商品标签中时,我也发生了这种情况,例如

<item />
    <menu>
    </menu>

    <item >
        <menu>
        </menu>
   <item>

答案 3 :(得分:-1)

使用MenuItem对您的findItem语句进行类型转换

         MenuItem leftie = (MenuItem) menu.findItem(R.id.menu_profile);