【问题标题】:MenuItemCompat.getActionView Returns NullMenuItemCompat.getActionView 返回 Null
【发布时间】:2018-08-13 00:04:01
【问题描述】:

我正在尝试为我的菜单项实现自定义布局,并通过许多解决方案,当我尝试在为我的 menuItem 指定的布局内获取 TextView 时,我得到 Null 指针异常,因为 getActionView 返回 null。 home_menu:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_notifications"
        android:title=""
        app:showAsAction="always"
        android:visible="true"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:orderInCategory="3"
        android:actionLayout="@layout/counter_action_bar_notification_icon"
        />
    <!--android:icon="@drawable/ic_notifications_black_24dp"-->
    <!--android:actionLayout="@layout/bage_layout"-->
</menu>

counter_action_bar_notification_icon

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_gravity="center"
    android:clickable="true"
    style="@android:style/Widget.ActionButton">

    <ImageView
        android:id="@+id/hotlist_bell"
        android:src="@drawable/ic_notifications_black_24dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_margin="0dp"
        android:contentDescription="bell"
    />

    <TextView
        android:id="@+id/hotlist_hot"
        android:layout_width="wrap_content"
        android:minWidth="17sp"
        android:textSize="12sp"
        android:textColor="#ffffffff"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@null"
        android:layout_alignTop="@id/hotlist_bell"
        android:layout_alignRight="@id/hotlist_bell"
        android:layout_marginRight="0dp"
        android:layout_marginTop="3dp"
        android:paddingBottom="1dp"
        android:paddingRight="4dp"
        android:paddingLeft="4dp"
        android:background="@drawable/bage_circle"/>
</RelativeLayout>

MainActivity:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.home_menu, menu);
        item = menu.findItem(R.id.action_notifications);
        if(loginStatus==false){
            item.setVisible(false);
            return false;
        }
        if(user!=null && !user.getUserType().equals("3")){
            item.setVisible(false);
            return false;
        }

        final View menu_hotlist = MenuItemCompat.getActionView(item);
        TextView ui_hot =(TextView) menu_hotlist.findViewById(R.id.hotlist_hot);
        ui_hot.setText(Integer.toString(13));

        return true;

}

【问题讨论】:

    标签: android menuitem


    【解决方案1】:

    试试这个

    item.setActionView(R.layout.counter_action_bar_notification_icon);
    
            final View menu_hotlist = MenuItemCompat.getActionView(item);
            TextView ui_hot =(TextView) menu_hotlist.findViewById(R.id.hotlist_hot);
            ui_hot.setText(Integer.toString(13));
    

    【讨论】:

    • 为我工作,但不知道为什么在 XML 中静态指定时它不起作用
    【解决方案2】:

    使用

    app:actionLayout
    

    而不是

    android:actionLayout 
    

    在您的布局文件中,不要忘记定义应用程序

    xmlns:app="http://schemas.android.com/apk/res-auto"
    

    【讨论】:

      【解决方案3】:

      这是因为getActionView() 返回了app:actionViewClass item 属性中注入的视图。

      例如

      <item android:id="@+id/action_search"
                android:title="@string/option_search"
                android:icon="@drawable/ic_action_search"
                app:showAsAction="collapseActionView|ifRoom"
                app:actionViewClass="YourCustomView"/>
      

      这里 getActionView() 将返回一个YourCustomView 引用。您必须使用app:actionViewClass 而不是android:actionLayout 注入您的视图对象。然后你必须创建你的 Java 类 YourCustomView extends RelativeLayout 膨胀 R.layout.counter_action_bar_notification_icon

      【讨论】:

      • 它不是 searchView
      • 但我尝试了@Faisal Naseer 的解决方案,它工作不知道什么时候静态指定它没有工作
      猜你喜欢
      • 2018-10-23
      • 2015-11-15
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      相关资源
      最近更新 更多