代码之家  ›  专栏  ›  技术社区  ›  Digvijay

如何获取操作栏项的id

  •  0
  • Digvijay  · 技术社区  · 4 年前

    我要设置操作栏项目的徽章计数。为此,我使用以下外部库:

    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;
    }
    

    有人让我知道我做错了什么。任何帮助都将不胜感激。

    谢谢

    0 回复  |  直到 4 年前