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

这是我从活动(MainActivity)-> ListFragment(JungleList-Fragment)-> Fragment(JungleInfo-Fragment)进入的Log.i代码片段

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()中或从我在Fragments中收集的内容)我的onCreateView()方法的代码,因为它处理了savedInstanceState)以保存在jungleChoice中保留的内容。但是如果是这种情况,我不知道如何将其保存在onPause()中,然后再将其加载回onResume()/ onCreateView()中。有人可以阐明我的问题所在或可能的解决方案吗?

最佳答案

尝试此链接可以很好地讨论持久状态的选项。通常,saveInstanceState适用于瞬态情况,例如方向更改,但对于更长的持久性,您可能需要考虑使用SQLite或SharedPreferences。

Saving Android Activity state using Save Instance State

祝好运。

10-07 19:50
查看更多