在Fragment
推送并替换新的Fragment
;
此代码在没有Android 4.x的任何异常的情况下运行 但是对于Android 2.3.x有NullPointerException。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.menu, menu);
menu.findItem(R.id.ab_basket).setIcon(R.drawable.ic_menu_badge);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem basketItem = menu.findItem(R.id.ab_basket);
if (basketItem.getIcon() != null) {
LayerDrawable icon = (LayerDrawable) basketItem.getIcon();
setBadgeCount(icon, ((NApplication) PageManager.getActivity().getApplication()).getClientData().getUserBasketItemCount());
}
}
** if(basketItem.getIcon()!= null)NullPointerException。 **
异常这样:
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:582)
at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:103)
at android.graphics.drawable.LayerDrawable.<init>(LayerDrawable.java:95)
at android.graphics.drawable.LayerDrawable$LayerState.newDrawable(LayerDrawable.java:612)
at android.content.res.Resources.getCachedDrawable(Resources.java:1753)
at android.content.res.Resources.loadDrawable(Resources.java:1664)
at android.content.res.Resources.getDrawable(Resources.java:581)
at android.support.v7.internal.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:417)
at ****.fragment.main.MainFragment.onPrepareOptionsMenu(MainFragment.java:97)
at android.support.v4.app.Fragment.performPrepareOptionsMenu(Fragment.java:1600)
at android.support.v4.app.FragmentManagerImpl.dispatchPrepareOptionsMenu(FragmentManager.java:2004)
at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:482)
at android.support.v7.app.ActionBarActivity.superOnPreparePanel(ActionBarActivity.java:228)
at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:69)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
我该如何解决这个问题?
答案 0 :(得分:0)
如果basketItem为null,则调用basketItem.getIcon()以nullpointer结尾
if(basketItem !=null){
}
解决您的问题