2016-08-18 32 views
1

我想一个bagde添加到购物车图标上我的动作条喜欢这幅画enter image description hereAndroid 4.0的车徽章NullPointerException异常

,但我现在面临的问题是为Android 4.0,应用程序崩溃。我第一次启动应用程序,它的工作完美,bagde设置,然后,我点击图标。然后,应用程序向我显示购物车片段,当我点击后退按钮时,应用程序给我空指针异常。 我下面这个教程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); 

} 

没有任何人有同样的问题?

回答

0

设定LayerDrawble.setDrawableByLayerID()

呼叫menu.setIcon后();

参考以下示例代码:

私人无效setBadgeCount(MainNavigationActivity mainNavigationActivity,LayerDrawable图标,字符串计数){

// 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); 
} 
相关问题