Je continue à recevoir le crash de setnextanim sans laisser de trace à l'emplacement exact dans mon code. Voici le seul endroit où j'utilise nextanim:
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
Animation defaultAnimation = super.onCreateAnimation(transit, enter, nextAnim);
if (defaultAnimation == null && nextAnim != 0) {
defaultAnimation = AnimationUtils.loadAnimation(getActivity(), nextAnim);
}
if (defaultAnimation != null) {
if (getView() != null) {
getView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
defaultAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
if (getView() != null) {
getView().setLayerType(View.LAYER_TYPE_NONE, null);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
return defaultAnimation;
}
et voici la trace que j'ai pu trouver:
FATAL EXCEPTION: main
Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference
at Android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.Java:765)
at Android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.Java:2580)
at Android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.Java:2367)
at Android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.Java:2322)
at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:2229)
at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:700)
at Android.os.Handler.handleCallback(Handler.Java:751)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:154)
at Android.app.ActivityThread.main(ActivityThread.Java:6119)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:886)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:776)
Une idée de ce que je fais mal qui pourrait invoquer ce crash?
En regardant l'exception:
Java.lang.NullPointerException: tentative d'appeler la méthode virtuelle 'void Android.support.v4.app.Fragment.setNextAnim (int) 'sur un objet null référence
et le fait que la trace de la pile ne contienne aucune référence à votre code, je pense qu’il est raisonnable de supposer qu’elle n’est pas liée à cette partie de votre code.
Au contraire, il est peut-être lié au fait qu'une vue est en train d'être collectée/annulée quelque part sur la ligne, puis essayée de l'utiliser plus tard, puis d'appeler show/hide ou similaire sur un objet null. Voir cette discussion .
Dans mon cas, j'ai enlevé un fragment null
de la pile:
val fragment = getSelectedFragment() // null
supportFragmentManager?.beginTransaction()
?.remove(fragment)
?.commit()
Vous pouvez également transmettre cette erreur lorsque vous demandez à la transaction de fragment de supprimer un fragment null