如何将MenuItem转换为LinearLayout

4

我有一个带菜单的NavigationView。 我可以通过以下方式从navigationView获取MenuItem:

MenuItem menuItem = navigationView.getMenu().getItem(0);
LinearLayout linearLayout = (LinearLayout) menuItem; 

我想将menuItem转换为LinearLayout或View。
我在menu.xml中设置了android:actionViewClassmenu:
 <item
    android:id="@+id/nav_backup"
    android:icon="@drawable/ic_sd_card_black_24dp"
    android:actionViewClass="android.widget.LinearLayout"
    android:title="@string/backup_configuration" />

在进行强制类型转换时,我遇到了NullPointerException。我该如何进行转换?

1个回答

10

首先尝试将自定义布局设置为您的 MenuItem ,然后像下面的代码一样将其转换为 LinearLayout

MenuItem item = menu.findItem(R.id.action_cart);
MenuItemCompat.setActionView(item, R.layout.menu_layout);
LinearLayout linearLayout = (LinearLayout) MenuItemCompat.getActionView(item);

编辑

setActionView()方法和getActionView()方法已在API级别26.1.0中弃用。

请直接使用MenuItem.setActionView()MenuItem.getActionView()方法。

示例代码

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem item = menu.findItem(R.id.action_menu);
        item.setActionView( R.layout.activity_main);
        LinearLayout linearLayout = (LinearLayout) item.getActionView();
        return super.onCreateOptionsMenu(menu);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接