[ RongExceptionHandler ] uncaughtException
java.lang.NullPointerException: Attempt to read from field 'int android.support.v4.app.Fragment.mContainerId' on a null object reference
at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1017)
at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:976)
at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:95)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5981)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
最近在做底部导航栏切换的时候,遇到这样一个bug, 发现切换fragment的时候,怎么会报空指针呢?
代码如下:
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { Fragment currentFragment = fragmentManager.findFragmentByTag(fragmentTag); FragmentTransaction tr = fragmentManager.beginTransaction(); tr.hide(currentFragment); switch (checkedId) { case R.id.rb_home: fragment = fragmentManager.findFragmentByTag(HomeFragment.TAG); fragmentTag = HomeFragment.TAG; if (fragment == null) { fragment = new HomeFragment(); } break; case R.id.rb_social: fragment = fragmentManager.findFragmentByTag(SocialFragment.TAG); fragmentTag = SocialFragment.TAG; if (fragment == null) { fragment = new SocialFragment(); } break; case R.id.rb_buy: fragment = fragmentManager.findFragmentByTag(ShopMallFragment.TAG); fragmentTag = ShopMallFragment.TAG; if (fragment == null) { fragment = new ShopMallFragment(); } break; case R.id.rb_crowd: //fragment = fragmentManager.findFragmentByTag(CrowdFragment.TAG); //fragmentTag = CrowdFragment.TAG; fragment = fragmentManager.findFragmentByTag(CrowdListFragment.TAG); fragmentTag = CrowdListFragment.TAG; if (fragment == null) { //fragment = new CrowdFragment(); fragment = new CrowdListFragment(); } break; case R.id.rb_me: fragment = fragmentManager.findFragmentByTag(UserFragment.TAG); fragmentTag = UserFragment.TAG; if (fragment == null) { fragment = new UserFragment(); } break; } if (fragment != null && fragment.isAdded()) { tr.show(fragment); } else { tr.add(R.id.content, fragment, fragmentTag); } tr.addToBackStack(null); tr.commitAllowingStateLoss(); } });
其实就是这句代码报错! 在进行隐藏的时候,加上一个非空判断就可以了
tr.hide(currentFragment);//