2

我的应用程序有 1 个活动,其中包含一些片段。但是当我进入我的片段(JungleInfo)时,我然后点击菜单按钮并转到手机的“显示”部分以更改我的 android 设备的字体例如)正常到大或大到正常。一旦我这样做了,我再次打开我的应用程序,认为我的应用程序中的文本应该增长/缩小,并且仍然像我在其他应用程序中看到的那样位于同一个片段上,但它只是崩溃了。

这个 Log.i 代码片段是当我从 Activity (MainActivity) -> ListFragment (JungleList-Fragment) -> Fragment (JungleInfo-Fragment)

10-01 12:47:45.193: I/MainActivity(1039): onCreate
10-01 12:47:45.453: I/MainActivity(1039): onStart
10-01 12:47:45.483: I/MainActivity(1039): onResume
10-01 12:47:50.913: I/Jungle-ListFragment(1039): onAttach
10-01 12:47:50.923: I/Jungle-ListFragment(1039): onCreateView
10-01 12:47:50.993: I/Jungle-ListFragment(1039): onActivityCreated
10-01 12:47:52.244: I/Jungle-ListFragment(1039): onDestroyView
10-01 12:47:52.244: I/JungleInfo-Fragment(1039): onAttach
10-01 12:47:52.244: I/JungleInfo-Fragment(1039): onCreate
10-01 12:47:52.244: I/JungleInfo-Fragment(1039): onCreateView
10-01 12:47:52.924: I/JungleInfo-Fragment(1039): onActivityCreated

现在我只是去更改了设备的字体大小,然后重新进入了我的应用程序,这就是我得到的:

10-01 12:48:23.533: I/JungleInfo-Fragment(1039): onPause
10-01 12:48:23.533: I/MainActivity(1039): onPause
10-01 12:48:24.253: I/MainActivity(1039): onStop
10-01 12:48:54.313: I/JungleInfo-Fragment(1039): onDestroyView
10-01 12:48:54.373: I/MainActivity(1039): onDestroy
10-01 12:48:54.483: I/Jungle-ListFragment(1039): onAttach
10-01 12:48:54.503: I/JungleInfo-Fragment(1039): onAttach
10-01 12:48:54.503: I/JungleInfo-Fragment(1039): onCreate
10-01 12:48:54.503: I/MainActivity(1039): onCreate
10-01 12:48:55.423: I/JungleInfo-Fragment(1039): onCreateView
10-01 12:48:55.483: D/AndroidRuntime(1039): Shutting down VM
10-01 12:48:55.483: W/dalvikvm(1039): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
10-01 12:48:55.513: E/AndroidRuntime(1039): FATAL EXCEPTION: main
10-01 12:48:55.513: E/AndroidRuntime(1039): java.lang.RuntimeException: java.lang.NullPointerException

我追踪了这个以找到什么是空的,我发现了这个,

在我的 JungleInfo 课程中,我有这个:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
    jungleChoice = ((MainActivity)getActivity()).fragmentDataJungle.toString();  //This is null when the app gets loaded up again after a device font change.
...
}

现在第一次运行它不是空的,因为我使用它来告诉下一个片段用户在 ListFragment 中选择了什么,但是当我退出以更改设备字体然后重新进入应用程序时,它现在为空。

根据我对其他 StackOverflow 问题和 android 开发者页面的总结,http://developer.android.com/reference/android/app/Fragment.html#Layout我认为我需要在我的 Activity 或 Fragments 生命周期中做一些事情(特别是在 onPause()、onResume() 或我在 onCreateView() 方法中收集的关于 Fragments 的内容,因为它处理的是 savedInstanceState)来保存保留在jungleChoice 中的内容。但如果是这种情况,我不知道如何在 onPause() 中保存它,然后在 onResume()/onCreateView() 中重新加载它。任何人都可以阐明我的问题是什么或可能的解决方案吗?

4

1 回答 1

1

试试这个链接,就持久状态的选项进行很好的讨论。一般来说,savedInstanceState 适用于诸如方向变化之类的瞬态情况,但对于更长的持久性,您可能需要考虑 SQLite 或 SharedPreferences。

使用 Save Instance State 保存 Android Activity 状态

祝你好运。

于 2012-10-01T16:00:03.553 回答