繁体   English   中英

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

[英]When I leave my app to change the device font and go back into my app it crashes.

我的应用程序有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中收集到的信息,因为这涉及到saveInstanceState),以保存在JungleChoice中保留的内容。 但是如果是这种情况,我不知道如何将其保存在onPause()中,然后再将其加载回onResume()/ onCreateView()中。 有人可以阐明我的问题所在或可能的解决方案吗?

试试这个链接上持续状态的选项了很好的讨论。 在一般情况下,savedInstanceState是良好的瞬态情况,如方向变化,但对于较长的持久性,你可能要考虑的SQLite或SharedPreferences。

使用“保存实例状态”保存Android活动状态

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM