0

私のアプリには、1 つのアクティビティ (アクティビティ A) と 3 つのフラグメント (フラグメント B、フラグメント C、フラグメント D) があります。プロセスは、Activity A -> Frag B -> Frag C -> Frag D に進みます。私のアプリは画面の向きを変更できますが、Frag D または Frag C を使用していて、1 つの画面の向きを変更すると、アプリは引き続き動作します。2 つ以上の画面の向きを変更すると、savedInstanceState が変更され、アクティビティ A に保存したすべてが null になり、nullPointerException が発生するため、「戻る」をクリックして前のフラグメントに移動すると、アプリがクラッシュします。

なぜこれが起こっているのか、私は本当に指を置くことはできませんが、うまくいけば誰かがこれが起こっている理由について考えているかもしれません。横向きか縦向きかは関係ありませんが、向きが 2 回以上変更されたときだけです。これを非常に長くしない限り、ここにどのコードを入れればよいかわかりません。

編集。ログキャット:

11-12 20:44:46.637: I/Activity A(998): onStart
11-12 20:44:46.637: I/Activity A(998): onResume
11-12 20:46:18.947: I/Frag B(998): onCreateView
11-12 20:46:19.157: I/Frag B(998): onStart
11-12 20:46:19.157: I/Frag B(998): onResume
11-12 20:46:23.057: I/Frag B(998): onPause
11-12 20:46:23.067: I/Frag B(998): onStop
11-12 20:46:23.067: I/Frag C(998): onCreateView
11-12 20:46:23.327: I/Frag C(998): onStart
11-12 20:46:23.327: I/Frag C(998): onResume
11-12 20:46:25.507: I/Frag C(998): onPause
11-12 20:46:25.507: I/Frag C(998): onStop
11-12 20:46:25.527: I/Frag D(998): onCreateView
11-12 20:46:29.466: I/Frag D(998): onStart
11-12 20:46:29.466: I/Frag D(998): onResume

//First screen rotation.

11-12 20:46:52.907: I/Frag D(998): onPause
11-12 20:46:52.907: I/Activity A(998): onPause
11-12 20:46:52.907: I/System.out(998): savedInstanceState in Frag C = Bundle[{LibraryChoice=Fighter}]
11-12 20:46:52.907: I/System.out(998): savedInstanceState in Frag D = Bundle[{LibraryChoice=Fighter, LibraryChoiceSelected=FighterSelected}]
11-12 20:46:52.947: I/Frag D(998): onStop
11-12 20:46:52.947: I/Activity A(998): onStop
11-12 20:46:52.957: I/Frag B(998): onDestroy
11-12 20:46:52.957: I/Frag C(998): onDestroy
11-12 20:46:53.037: I/Frag D(998): onDestroy
11-12 20:46:53.037: I/Activity A(998): onDestroy
11-12 20:46:53.667: I/Frag D(998): onCreateView
11-12 20:46:57.127: I/Frag D(998): onStart
11-12 20:46:57.127: I/Activity A(998): onStart
11-12 20:46:57.147: I/Activity A(998): onResume
11-12 20:46:57.147: I/Frag D(998): onResume

//Second screen rotation.

11-12 20:47:05.697: I/Frag D(998): onPause
11-12 20:47:05.697: I/Activity A(998): onPause
11-12 20:47:05.697: I/System.out(998): savedInstanceState in Frag C = Bundle[{LibraryChoice=null}]
11-12 20:47:05.697: I/System.out(998): savedInstanceState in Frag D = Bundle[{LibraryChoice=Fighter, LibraryChoiceSelected=FighterSelected}]
11-12 20:47:05.737: I/Frag D(998): onStop
11-12 20:47:05.737: I/Activity A(998): onStop
11-12 20:47:05.747: I/Frag B(998): onDestroy
11-12 20:47:05.747: I/Frag C(998): onDestroy
11-12 20:47:05.867: I/Frag D(998): onDestroy
11-12 20:47:05.867: I/Activity A(998): onDestroy
11-12 20:47:06.457: I/Frag D(998): onCreateView
11-12 20:47:09.907: I/Frag D(998): onStart
11-12 20:47:09.907: I/Activity A(998): onStart
11-12 20:47:09.917: I/Activity A(998): onResume
11-12 20:47:09.917: I/Frag D(998): onResume

//Back button pressed.

11-12 20:47:19.696: I/Frag D(998): onPause
11-12 20:47:19.696: I/Frag D(998): onStop
11-12 20:47:19.707: I/Frag C(998): onCreateView
11-12 20:47:19.977: D/AndroidRuntime(998): Shutting down VM
11-12 20:47:20.017: E/AndroidRuntime(998): FATAL EXCEPTION: main
11-12 20:47:20.017: E/AndroidRuntime(998): java.lang.NullPointerException
11-12 20:47:20.017: E/AndroidRuntime(998): at j.l.ls11.FragB.onCreateView(FragB.java:99)

Frag Cをnullにしない方法を知っている人はいますか?

4

1 に答える 1

0

私がする必要があったのは、フラグメントが双方向で通信できるようにすることでした。私はそれをB->C->Dとして持っていて、D->C->Bを持っていませんでした。そのように情報を渡してもらうと、うまくいきました。:)

于 2012-11-14T05:55:22.873 に答える