web-dev-qa-db-ja.com

setnextanimでクラッシュしますか?

コード内の正確な場所へのトレースなしで、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)

このクラッシュを引き起こす可能性のある、私が間違っていることのアイデアはありますか?

7

例外を見る:

Java.lang.NullPointerException:nullオブジェクト参照で仮想メソッド「void Android.support.v4.app.Fragment.setNextAnim(int)」を呼び出そうとしました

スタックトレースにコードへの参照が含まれていないという事実は、それがコードのこの部分に関連していないと想定するのが妥当だと思います。

むしろ、それはおそらく、ビューのどこかでガベージコレクション/ null化されているビューに関連しており、後でそれを使用して、nullオブジェクトに対してshow/hideまたは同様のものを呼び出します。 この説明 を参照してください。

13
eis

私の場合、スタックからnullフラグメントを削除しました:

val fragment = getSelectedFragment() // null
supportFragmentManager?.beginTransaction()
    ?.remove(fragment)
    ?.commit()
11
CoolMind

フラグメントトランザクションにnullフラグメントの削除を要求するときにも、このエラーを渡すことができます

1
Camilo Romero

私にとってはfragmentTransaction.hide(fragment)でしたが、私のfragmentはnullでした。

これが誰にも役立つことを願っています。

1
Nouman Ch

私にとっては:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(currentFragment);
ft.attach(currentFragment);
ft.commit();

ここで、currentFragmentはnullでした。

そのため、フラグメントを使用する場合は、フラグメントがnullでないことを確認してください。

1
Sebi