Android改配置项(字体大小)后返回应用时程序(Fragment)崩溃
来源:互联网 发布:淘宝库存手表是真是假 编辑:程序博客网 时间:2024/05/29 03:31
RT,
昨天碰到的BUG.Android改配置项(字体大小)后返回应用时程序(Fragment)崩溃
1.Activity中有一个Fragment,代码:
XXXActivity{FragmentTransaction ft = getFragmentManager().beginTransaction();keypadFragment = new ModifyDetailsItemFragment(params);ft.add(R.id.frame_keypad, keypadFragment);ft.commit();}
2.切到系统设置画面,修改系统字体大小:小->大
3.切回程序,程序崩溃
06-23 10:22:49.651: E/AndroidRuntime(21729): FATAL EXCEPTION: main06-23 10:22:49.651: E/AndroidRuntime(21729): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx/com.xxx.XXXActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.xxx.ModifyDetailsItemFragment: make sure class name exists, is public, and has an empty constructor that is public06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1992)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2017)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3405)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.ActivityThread.access$800(ActivityThread.java:132)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1181)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.os.Handler.dispatchMessage(Handler.java:99)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.os.Looper.loop(Looper.java:137)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.ActivityThread.main(ActivityThread.java:4507)06-23 10:22:49.651: E/AndroidRuntime(21729): at java.lang.reflect.Method.invokeNative(Native Method)06-23 10:22:49.651: E/AndroidRuntime(21729): at java.lang.reflect.Method.invoke(Method.java:511)06-23 10:22:49.651: E/AndroidRuntime(21729): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)06-23 10:22:49.651: E/AndroidRuntime(21729): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:559)06-23 10:22:49.651: E/AndroidRuntime(21729): at dalvik.system.NativeStart.main(Native Method)06-23 10:22:49.651: E/AndroidRuntime(21729): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.xxx.ModifyDetailsItemFragment: make sure class name exists, is public, and has an empty constructor that is public06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.Fragment.instantiate(Fragment.java:585)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.FragmentState.instantiate(Fragment.java:96)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1682)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.Activity.onCreate(Activity.java:864)06-23 10:22:49.651: E/AndroidRuntime(21729): at com.xxx.XXXActivity.onCreate(XXXActivity.java:594)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.Activity.performCreate(Activity.java:4480)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)06-23 10:22:49.651: E/AndroidRuntime(21729): ... 12 more06-23 10:22:49.651: E/AndroidRuntime(21729): Caused by: java.lang.InstantiationException: can't instantiate class com.xxx.ModifyDetailsItemFragment; no empty constructor06-23 10:22:49.651: E/AndroidRuntime(21729): at java.lang.Class.newInstanceImpl(Native Method)06-23 10:22:49.651: E/AndroidRuntime(21729): at java.lang.Class.newInstance(Class.java:1319)06-23 10:22:49.651: E/AndroidRuntime(21729): at android.app.Fragment.instantiate(Fragment.java:574)06-23 10:22:49.651: E/AndroidRuntime(21729): ... 19 more
解决办法:
在Fragment中加入以下代码:
public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); // 把这个加上!!! setRetainInstance( true ); }
结论:
(以下为推测)
根本原因是参数是通过构造方法传入Fragment的,而不是Fragment.setArguments(Bundle bundle),因此配置项变了后实例化一个新的Fragment,并且给mArgments初始化为原先的值,而原来的Fragment实例的数据都丢失了,并重新进行了初始化.
参考:
http://blog.csdn.net/tu_bingbing/article/details/9274289
http://blog.csdn.net/tu_bingbing/article/details/24143249
0 0
- Android改配置项(字体大小)后返回应用时程序(Fragment)崩溃
- Android按返回键退出应用时弹出对话框
- 开发android应用时,更换应用图标后没生效
- 崩溃后重新打开程序,fragment 重叠问题
- Android单击通知栏后返回正在运行的程序并跳转到指定fragment页面
- Android 程序崩溃后的处理
- Android adapter.notifyDataSetChanged 后程序崩溃,求解!
- 编译应用时的Android.mk文件
- Android开启应用时自动创建快捷方式
- Android启动应用时闪一下黑屏
- 程序调用系统拍照返回后崩溃的问题
- 友盟分享成功,返回后,程序崩溃的问题
- 程序调用系统拍照返回后崩溃的问题
- 按home键后,程序后台运行,再次打开应用时,不再走启动页面,直接进入应用
- nginx + passenger + rails 访问应用时返回403错误
- App Store更新应用时,更新中断后无法下载
- 关于Fragment中的getActivity()返回null导致程序崩溃的解决方案
- 关于部署、配置基于WebLogic10应用时的一个错误
- 】OpenCV中GPU模块使用
- 心情不好~~
- 更新UI的两种方法——handler和runOnUiThread()
- Linux commands
- TCP/IP Http Https 总结
- Android改配置项(字体大小)后返回应用时程序(Fragment)崩溃
- As of ADT 14, resource fields cannot be used as switch cases.
- Eclipse 提示Adt 和 Andoroid Sdk 不匹配的临时解决方案
- asyn4j -- 异步方法调用框架
- 6. 面对对象(高级) Part 4 --- 学习笔记
- 99_leetcode_Best Time to Buy and sell Stock
- 微信营销怎么做?
- Java命名和目录服务(JNDI)
- soft skill