我正在尝试为我的菜单项实现自定义布局并经历了许多解决方案我得到Null指针异常每当我尝试在我的menuItem为actionLayout
指定的布局中获取TextView时getActionView返回空值。
的 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;
}
答案 0 :(得分:4)
试试这个
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));
答案 1 :(得分:1)
这是因为getActionView()
返回app:actionViewClass
项属性中注入的视图。
例如
<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
注入视图对象。然后你必须创建一个夸大R.layout.counter_action_bar_notification_icon的Java类YourCustomView extends RelativeLayout
答案 2 :(得分:1)
使用
app:actionLayout
代替
android:actionLayout
在布局文件中,别忘了定义应用程序
xmlns:app="http://schemas.android.com/apk/res-auto"