首页 > 解决方案 > 无法在操作栏上设置徽章

问题描述

我正在尝试将徽章计数放在操作栏中的购物车图标上,但应用程序崩溃并显示错误。

Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null 
object reference.

此行显示错误:

TextView counter = view.findViewById(R.id.badgeCounter);

下面是我的代码:

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.action_menu, menu);

    menuItem = menu.findItem(R.id.cart_notif);

    View view = menuItem.getActionView();
    TextView counter = view.findViewById(R.id.badgeCounter);

    ProductDb db = ProductDb.getInstance(MainActivity.this);
    LiveData<Integer> s = db.productDao().no();

    s.observe(this, new Observer<Integer>() {
        @Override
        public void onChanged(Integer integer) {
            if(integer > 0){
                counter.setText(String.valueOf(integer));
            }
            if(integer == 0){
                counter.setVisibility(View.INVISIBLE);
            }
        }
    });

    return super.onCreateOptionsMenu(menu);
}

action_menu.xml

<?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:title=""
    android:id="@+id/cart_notif"
    android:icon="@drawable/ic_order"
    app:showAsAction="always"
    android:actionLayout="@layout/notification_badge"/>

</menu>

notification_badge.xml

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize">

<ImageView
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:src="@drawable/ic_order"
    android:layout_gravity="center"/>

<TextView
    android:layout_width="23dp"
    android:layout_height="23dp"
    android:id="@+id/badgeCounter"
    android:background="@drawable/badge"
    android:text="5"
    android:gravity="center"
    android:textColor="@color/white"
    android:layout_gravity="center"
    android:layout_marginStart="14dp"
    android:layout_marginBottom="10dp"/>

</FrameLayout>

为什么会出现这个问题?

标签: javaandroidxmlandroid-actionbarbadge

解决方案


推荐阅读