当我离开我的应用程序更改设备字体并返回到我的应用程序时,它会崩溃。

时间:2012-10-01 13:32:59

标签: android android-fragments android-activity font-size

我的应用有1个活动,其中包含一些片段。但是当我进入我的片段(JungleInfo)时,我点击菜单按钮,然后转到手机的“显示”部分,将我的Android设备的字体更改为Ex)Normal to Large或Large to Normal。一旦我这样做,我再次打开我的应用程序,认为我的应用程序中的文本应该增长/缩小,仍然在我在其他应用程序中看到的相同片段,但它只是崩溃。

这里的Log.i代码片段是我从Activity(MainActivity)开始的 - > ListFragment(JungleList-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.
...
}

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

从我对其他StackOverflow问题以及android开发者页面http://developer.android.com/reference/android/app/Fragment.html#Layout开始,我想我需要在我的Activity或Fragments生命周期中做某事(特别是在onPause(),onResume()或者是什么我收集了onCreateView()方法中的Fragments,因为它处理savedInstanceState)以保存jungleChoice中保留的内容。但如果是这种情况,我不知道如何在onPause()中保存它,然后将它加载回onResume()/ onCreateView()。任何人都可以了解我的问题或可能的解决方案吗?

1 个答案:

答案 0 :(得分:1)

尝试此链接,以便对持久状态的选项进行详细讨论。通常,savedInstanceState适用于诸如方向更改等瞬态情况,但对于更长的持久性,您可能需要考虑SQLite或SharedPreferences。

Saving Android Activity state using Save Instance State

祝你好运。