コード内の正確な場所へのトレースなしで、setnextanimがクラッシュし続けます。これが私が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;
}
そしてここに私が見つけた痕跡があります:
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)
このクラッシュを引き起こす可能性のある、私が間違っていることのアイデアはありますか?
例外を見る:
Java.lang.NullPointerException:nullオブジェクト参照で仮想メソッド「void Android.support.v4.app.Fragment.setNextAnim(int)」を呼び出そうとしました
スタックトレースにコードへの参照が含まれていないという事実は、それがコードのこの部分に関連していないと想定するのが妥当だと思います。
むしろ、それはおそらく、ビューのどこかでガベージコレクション/ null化されているビューに関連しており、後でそれを使用して、nullオブジェクトに対してshow/hideまたは同様のものを呼び出します。 この説明 を参照してください。
私の場合、スタックからnull
フラグメントを削除しました:
val fragment = getSelectedFragment() // null
supportFragmentManager?.beginTransaction()
?.remove(fragment)
?.commit()
フラグメントトランザクションにnullフラグメントの削除を要求するときにも、このエラーを渡すことができます
私にとってはfragmentTransaction.hide(fragment)
でしたが、私のfragment
はnullでした。
これが誰にも役立つことを願っています。
私にとっては:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(currentFragment);
ft.attach(currentFragment);
ft.commit();
ここで、currentFragmentはnullでした。
そのため、フラグメントを使用する場合は、フラグメントがnullでないことを確認してください。