0

在我的应用程序中有 1 个活动(活动 A)和 3 个片段(片段 B、片段 C、片段 D)。这个过程是 Activity A -> Frag B -> Frag C -> Frag D。我的应用程序可以做屏幕方向,但是当我在 Frag D 或 Frag C 上并且我做 1 个屏幕方向时改变它的罚款并且应用程序仍然可以工作。当我执行 2+ 屏幕方向更改我的 savedInstanceState 并且我保存在我的 Activity A 中的所有内容都变为 null 并且我得到一个 nullPointerException 时,所以当我单击“返回”转到上一个片段时,应用程序崩溃了。

我无法真正指出为什么会发生这种情况,但希望有人可能知道为什么会发生这种情况,我认为如果 1 个屏幕方向有效,那么为什么第二个屏幕方向会这样做?我从横向还是纵向开始并不重要,但它只是在发生 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 不为空吗?

4

1 回答 1

0

我需要做的是让片段以两种方式进行通信。我只是将它作为 B->C->D 并没有 D->C->B。一旦我让他们以这种方式传递信息,它就起作用了。:)

于 2012-11-14T05:55:22.873 回答