【发布时间】:2012-09-22 08:45:32
【问题描述】:
我的应用有 1 个活动,其中包含一些片段。但是当我进入我的片段(JungleInfo)时,我然后点击菜单按钮并转到手机的“显示”部分以更改我的 android 设备的字体例如)正常到大或大到正常。一旦我这样做了,我再次打开我的应用程序,认为我的应用程序中的文本应该增长/缩小,并且仍然像我在其他应用程序中看到的那样位于同一个片段上,但它只是崩溃了。
这里的 Log.i 代码 sn-p 是我从 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() 方法中的片段,因为它处理 saveInstanceState) 以保存保留在jungleChoice 中的内容。但如果是这种情况,我不知道如何在 onPause() 中保存它,然后在 onResume()/onCreateView() 中重新加载它。谁能解释一下我的问题是什么或可能的解决方案?
【问题讨论】:
-
第一次点击 SO 搜索 savedInstanceState stackoverflow.com/questions/151777/…
-
@Simon 如果是你,真的不值得投反对票,但感谢你的投入。我也去过那里,史蒂夫·莫斯利(Steve Moseley)所说的就是为什么我没有按照您暗示的方式进行操作,而是以 onPause/onResume 方式进行操作,因为它不是您建议的生命周期的一部分,除非我完全错过了某些东西您没有说明用于信息用途。
-
我没有投反对票,也没有暗示任何事情。我对该讨论的阅读涵盖了我能想到的所有选项。
-
@Simon 我现在正在尝试使用 savedInstanceState 并希望它能正常工作。再次感谢您的意见,我觉得这应该可行
-
@Simon Hey Simon,如果你把它作为你的答案,我会接受它。
标签: android android-fragments android-activity font-size