android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)

发布时间:2016-12-7 22:27:52 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)",主要涉及到android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)方面的内容,对于android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)感兴趣的同学可以参考一下。

android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576) 这个是Android的一个BUG: ①当你按Home键的时候 ②当你屏幕旋转的时候 ③当你从FragmentActivit跳到Activity中的时候 这三种情况都会引起该异常。 原因: stackoverflow上的大神在Android源代码中找到这样一段代码,如下: if (f.mSavedViewState != null) { if (result == null) { result = new Bundle(); } result.putSparseParcelableArray( FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState); } if (!f.mUserVisibleHint) { // Only add this if it's not the default value result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint); }此段代码经过修改如下: if (f.mSavedViewState != null) { if (result == null) { result = new Bundle(); } result.putSparseParcelableArray( FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState); } if (!f.mUserVisibleHint) { if (result == null) { result = new Bundle(); } // Only add this if it's not the default value result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint); } 解决方法:(全是到stackoverflow,谷歌代码找到的) ①重写onSaveInstanceState(Bundle outState),在该函数中不再调用super.onSaveInstanceState().(这种方法可以避免异常,仅仅是权宜之计,并不合理,不推荐使用该种方法)。 ②重写onSaveInstanceState(Bundle outState),再调用super.onSaveInstanceState()之前,添加这样一句代码: setUserVisibleHint(true);这样可以避免程序崩溃(不知道为什么,有知道的大神,望告之)。 ③在上面的大神已经给出了原因。因此为了不让result为null。重写onSaveInstanceState(Bundle outState),在调用super.onSaveInstanceState()之前,给outState添加一些内容即可。比如: outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE"); 参考: http://stackoverflow.com/questions/8748064/starting-activity-from-fragment-causes-nullpointerexception https://code.google.com/p/android/issues/detail?id=19917

上一篇:为什么要get( int field)? 为什么不直接 getDay_Of_Week() ??
下一篇:c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考

相关文章

相关评论