我要设置操作栏项目的徽章计数。为此,我使用以下外部库:
implementation 'com.mikepenz:actionitembadge:4.0.0'
2021-01-31 18:07:11.432 1446-1446/com.app.caketale E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.caketale, PID: 1446
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.FrameLayout.findViewById(int)' on a null object reference
at com.mikepenz.actionitembadge.library.ActionItemBadge.update(ActionItemBadge.java:186)
at com.mikepenz.actionitembadge.library.ActionItemBadge.update(ActionItemBadge.java:160)
at com.mikepenz.actionitembadge.library.ActionItemBadge.update(ActionItemBadge.java:129)
at com.mikepenz.actionitembadge.library.ActionItemBadge.update(ActionItemBadge.java:118)
at com.app.caketale.MainActivity$1.onChanged(MainActivity.java:63)
at com.app.caketale.MainActivity$1.onChanged(MainActivity.java:59)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:131)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:149)
at androidx.lifecycle.LiveData.setValue(LiveData.java:307)
at androidx.lifecycle.LiveData$1.run(LiveData.java:91)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7857)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
下面是我的代码:
<?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"
android:icon="@drawable/ic_order"
app:showAsAction="always"
android:actionLayout="@layout/menu_action_item_badge"/>
</menu>
主活动.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.action_menu, menu);
ProductDb db = ProductDb.getInstance(MainActivity.this);
LiveData<Integer> s = db.productDao().noOfProducts();
s.observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
if(integer != null){
ActionItemBadge.update(menu.findItem(R.id.cart),integer);
}
if(integer == null){
ActionItemBadge.hide(menu.findItem(R.id.cart));
}
}
});
return true;
}
有人让我知道我做错了什么。任何帮助都将不胜感激。
谢谢