Android setNextTransition(int,int)抛出NullPointerException
我为我的应用程序使用支持片段(onCreate()中的setRetainInstance(true))。有时应用程序会抛出NullPointerException:Android setNextTransition(int,int)抛出NullPointerException,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,我为我的应用程序使用支持片段(onCreate()中的setRetainInstance(true))。有时应用程序会抛出NullPointerException: Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.livemaster.zhurnal/ru.livemaster.zhurnal.activity.main.MainActivity}: java.lang.
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.livemaster.zhurnal/ru.livemaster.zhurnal.activity.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextTransition(int, int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextTransition(int, int)' on a null object reference
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:716)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2303)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2132)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1998)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:181)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265)
at android.app.Activity.performStart(Activity.java:6915)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3216)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
BackbackRecord中的此位置发生异常:
void executeOps() {
final int numOps = mOps.size();
for (int opNum = 0; opNum < numOps; opNum++) {
final Op op = mOps.get(opNum);
final Fragment f = op.fragment;
f.setNextTransition(mTransition, mTransitionStyle); //Exception occurs in this place
switch (op.cmd) {
...
}
if (!mAllowOptimization && op.cmd != OP_ADD) {
mManager.moveFragmentToExpectedState(f);
}
}
if (!mAllowOptimization) {
// Added fragments are added at the end to comply with prior behavior.
mManager.moveToState(mManager.mCurState, true);
}
}
然后执行替换事务:
protected static <T extends RichFragment> void replaceFragment(FragmentManager fragmentManager, T fragment, Bundle bundle) {
fragment.setArguments(bundle);
popWholeBackStack(fragmentManager);
FragmentTransaction transaction = fragmentManager.beginTransaction();
setAnimation(transaction);
transaction.replace(fragment.getContainerId(), fragment, getFragmentTag(fragment));
transaction.commit();
}
受保护的静态void replaceFragment(FragmentManager FragmentManager、T片段、捆绑包){
fragment.setArguments(bundle);
popWholeBackStack(碎片管理器);
FragmentTransaction=fragmentManager.beginTransaction();
设置动画(事务);
replace(fragment.getContainerId(),fragment,getFragmentTag(fragment));
commit();
}
这会导致坠机吗
protected static <T extends RichFragment> void replaceFragment(FragmentManager fragmentManager, T fragment, Bundle bundle) {
fragment.setArguments(bundle);
popWholeBackStack(fragmentManager);
FragmentTransaction transaction = fragmentManager.beginTransaction();
setAnimation(transaction);
transaction.replace(fragment.getContainerId(), fragment, getFragmentTag(fragment));
transaction.commit();
}