4

我在更改选项菜单上的某些属性时卡住了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

4 回答 4

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; 
            }
    }
于 2012-10-18T04:57:36.070 回答
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);
于 2012-10-18T11:54:51.260 回答
0

当我的子菜单未正确嵌套在项目标签中时,我也发生过这种情况,例如

<item />
    <menu>
    </menu>

或者

    <item >
        <menu>
        </menu>
   <item>
于 2013-05-03T14:24:16.327 回答
-1

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

         MenuItem leftie = (MenuItem) menu.findItem(R.id.menu_profile);
于 2012-10-18T05:32:01.853 回答