java菜单项。使用BottomNavigationBar时,setIcon引发NullPointerException
我用bottomnavigationbar替换了抽屉导航,发现我不能再使用ActionView了,这就是为什么我使用LayerDrawables作为图标的原因
final Menu menu = bottomNavigationView.getMenu();
notificationBullet = new NotificationDotDrawable(Color.Red, false, this);
final MenuItem nav = menu.findItem(R.id.nav_overview);
final LayerDrawable navMutate = (LayerDrawable) nav.getIcon().mutate();
navMutate.setDrawableByLayerId(R.id.ic_menu_upcoming_dot, notificationBullet);
nav.setIcon(navMutate);
现在我遇到了最后一个方法nav.setIcon(navMutate)
抛出NullPointerException的问题
不是nav
或navMutate
为空,而是操作系统中更高级的东西,这里是堆栈跟踪
我在这里使用两个变量:
最终层可绘制导航变异=(层可绘制)导航。getIcon()。突变()
导航变异。setDrawableByLayerId(R.id.ic\u菜单\u即将到来的\u点,notificationBullet)
这不可能,因为它们都是null,否则它将在此之前崩溃
java.lang.NullPointerException
at 安卓.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:671)
at 安卓.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:107)
at 安卓.graphics.drawable.LayerDrawable.<init>(LayerDrawable.java:99)
at 安卓.graphics.drawable.LayerDrawable$LayerState.newDrawable(LayerDrawable.java:696)
at 安卓.support.design.internal.BottomNavigationItemView.setIcon(BottomNavigationItemView.java:224)
at 安卓.support.design.internal.BottomNavigationItemView.initialize(BottomNavigationItemView.java:100)
at 安卓.support.design.internal.BottomNavigationMenuView.updateMenuView(BottomNavigationMenuView.java:313)
at 安卓.support.design.internal.BottomNavigationPresenter.updateMenuView(BottomNavigationPresenter.java:64)
at 安卓.support.v7.view.menu.MenuBuilder.dispatchPresenterUpdate(MenuBuilder.java:291)
at 安卓.support.v7.view.menu.MenuBuilder.onItemsChanged(MenuBuilder.java:1051)
at 安卓.support.v7.view.menu.MenuItemImpl.setIcon(MenuItemImpl.java:505)
at _redacted_.ui.NavActivity.setupBottomNav(NavActivity.java:424)
at _redacted_.ui.NavActivity.onCreate(NavActivity.java:182)
at 安卓.app.Activity.performCreate(Activity.java:5231)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at 安卓.app.ActivityThread.access$800(ActivityThread.java:135)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at 安卓.os.Handler.dispatchMessage(Handler.java:102)
at 安卓.os.Looper.loop(Looper.java:136)
at 安卓.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
这似乎只发生在5以下的Android版本上(所以SDK 16-19)
# 1 楼答案
您可以使用本机界面设置徽章(通知)图标和计数
只需添加材质组件依赖项
这样使用:
其中
R.id.messagesListFragment
是菜单项的id。 在SDK 19上测试