Я пытаюсь добавить bagde к иконе корзины на моем ActionBar нравится эта картина Android 4,0 Корзины значок NullPointerException
, но я столкнулся с проблемой, что для Android 4.0, приложение разбилось. В первый раз, когда я запускаю приложение, он отлично работает, пакет помещается, а затем я нажимаю на значок. Затем приложение показывает мне фрагмент корзины, и когда я нажимаю кнопку «Назад», это когда приложение дает мне исключение нулевого указателя. Я следовал этой обучающей программе 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);
}
Кто-нибудь есть такая же проблема ?