Android 4.0 购物车徽章 NullPointerException

标签 android menuitem badge

我正在尝试向我的操作栏上的购物车图标添加徽章,如下图所示 enter image description here

但我面临的问题是,对于 android 4.0,应用程序崩溃了。我第一次启动该应用程序时,它运行完美,徽章已设置,然后我单击该图标。然后,应用程序向我显示了购物车 fragment ,当我单击后退按钮时,应用程序向我显示了空指针异常。 我正在学习本教程 http://mobikul.com/adding-badge-count-on-menu-items-like-cart-notification-etc/

我发现问题出在这行代码:

LayerDrawable icon = (LayerDrawable) itemCart.getIcon();

因为当我得到图标时,它是空的。在获取图标之前,我正在尝试使用此代码:

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
       itemCart.setIcon(context.getResources().getDrawable(R.drawable.ic_menu_cart_icon));
    }

但这行不通。

这是我的 ic_menu_car.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/ic_cart_empty"
        android:gravity="center" />

    <!-- set a place holder Drawable so android:drawable isn't null -->
    <item
        android:id="@+id/ic_badge"
        android:drawable="@drawable/ic_cart_empty" />
</layer-list>

这是我的 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:id="@+id/cart_option"
        android:orderInCategory="100"
        android:title="@string/menu_cart"
        android:icon="@drawable/ic_menu_cart_icon"
        app:showAsAction="always" />

</menu>

还有代码:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    inflater.inflate(R.menu.home, menu);

    MenuItem itemCart = menu.findItem(R.id.cart_option);

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
        itemCart.setIcon(context.getResources().getDrawable(R.drawable.ic_menu_cart_icon));
    }

    LayerDrawable icon = (LayerDrawable) itemCart.getIcon();

    BadgeDrawable badge;

    // Reuse drawable if possible
    Drawable reuse = icon.findDrawableByLayerId(R.id.ic_badge);
    if (reuse != null && reuse instanceof BadgeDrawable) {
        badge = (BadgeDrawable) reuse;
    } else {
        badge = new BadgeDrawable(context, R.color.js_pink);
    }

    badge.setCount(count);
    icon.mutate();
    icon.setDrawableByLayerId(R.id.ic_badge, badge);

}

有没有人遇到同样的问题?

最佳答案

设置LayerDrawble.setDrawableByLayerID()后

调用 menu.setIcon();

引用下面的示例代码:

private void setBadgeCount(MainNavigationActivity mainNavigationActivity, LayerDrawable icon, String count) {

    // Reuse drawable if possible
    Drawable reuse = icon.findDrawableByLayerId(R.id.ic_badge);
    if (reuse != null && reuse instanceof BadgeDrawable) {
        badge = (BadgeDrawable) reuse;
    } else {
        badge = new BadgeDrawable(mainNavigationActivity);
    }

    badge.setCount(count);
    icon.mutate();
    icon.setDrawableByLayerId(R.id.ic_badge, badge);
    itemCart.setIcon(icon);
}

关于Android 4.0 购物车徽章 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39013903/

相关文章:

android - 带标题和子标题的抽屉导航菜单项

javascript - 为 javascript 菜单效果粘在当前页面的状态

ios - LocalNotification 角标(Badge)在 iOS7 中显示错误的号码

android - 如果先前在本地提交,Firebase 事务不会远程中止

android - 将Gradle构建工具更新为3.5.2后出现DataBinding问题

java - ARcore - 在不使用 TransformableNode 的情况下无法旋转模型

html - 如果子菜单是主菜单的一部分,如何激活菜单

ios - 是否必须将通知数量计算为应用程序图标上的角标(Badge)值?

iphone - 如果稍后启动,没有 APNS 启动选项?

java - Android 上的 .connect() 程序崩溃,未连接