【问题标题】:finditem() doesn't find menu, stuck with NullPointerExceptionfinditem() 找不到菜单,卡在 NullPointerException
【发布时间】:2012-10-18 02:54:30
【问题描述】:

我在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;
    }

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

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

【问题讨论】:

    标签: android android-layout android-menu


    【解决方案1】:

    您可以在 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; 
                }
        }
    

    【讨论】:

      【解决方案2】:

      我想通了。引用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);
      

      【讨论】:

        【解决方案3】:

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

        <item />
            <menu>
            </menu>
        

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-25
            • 1970-01-01
            • 1970-01-01
            • 2017-11-15
            • 2023-04-09
            • 1970-01-01
            相关资源
            最近更新 更多