Android 编译工具升级到24后遇到的坑之V4包的Fragment
2017-04-25 17:23
302 查看
android.support.v4.app.Fragment版本升到24及更高后,修复了一些fragment的bug,例如显示隐藏问题,但是又改了一部分逻辑,显示隐藏问题请看这篇文章
http://blog.csdn.net/archer_zoro/article/details/54237363
http://www.jianshu.com/p/c12a98a36b2b
开发工具是Android Studio我引入的依赖版本是compile'com.android.support:support-v4:25.3.1',旧工程就发生了这个错误。
java.lang.IllegalStateException: Fragment null must be a public static class to be properly recreated from instance state.
后来几经查询发现,是v4包升级后,FragmentManager 改变了判断,
这里抛出的异常就是我遇到的,解释下判断
java.lang.Class.isAnonymousClass() 当且仅当底层类是匿名类,则返回true
java.lang.Class.isMemberClass() 返回true当且仅当底层类是成员类。
isPublic和isStatic是修饰,类是不是public和静态类。
之前页面是一个普通左右滑动页面,用的viewpager和fragment组合,因为代码比较少,两个fragment都作为内部类写在了里面,一直相安无事,直到更新版本,解决办法就是把内部类fragment提取出来作为一个普通类就没问题了。
祝大家好运,我搜这个问题一直没搜到或者说没什么实际意义,最后还得研究代码,希望我写的能帮助到别人(ˇˍˇ) 想~。
http://blog.csdn.net/archer_zoro/article/details/54237363
http://www.jianshu.com/p/c12a98a36b2b
开发工具是Android Studio我引入的依赖版本是compile'com.android.support:support-v4:25.3.1',旧工程就发生了这个错误。
java.lang.IllegalStateException: Fragment null must be a public static class to be properly recreated from instance state.
后来几经查询发现,是v4包升级后,FragmentManager 改变了判断,
private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) { final Class fragmentClass = fragment.getClass(); final int modifiers = fragmentClass.getModifiers(); // 一开始是进行一些状态的判断 if (fragmentClass.isAnonymousClass() || !Modifier.isPublic(modifiers) || (fragmentClass.isMemberClass() && !Modifier.isStatic(modifiers))) { throw new IllegalStateException("Fragment " + fragmentClass.getCanonicalName() + " must be a public static class to be properly recreated from" + " instance state."); } //后面省略 }
这里抛出的异常就是我遇到的,解释下判断
java.lang.Class.isAnonymousClass() 当且仅当底层类是匿名类,则返回true
java.lang.Class.isMemberClass() 返回true当且仅当底层类是成员类。
isPublic和isStatic是修饰,类是不是public和静态类。
之前页面是一个普通左右滑动页面,用的viewpager和fragment组合,因为代码比较少,两个fragment都作为内部类写在了里面,一直相安无事,直到更新版本,解决办法就是把内部类fragment提取出来作为一个普通类就没问题了。
祝大家好运,我搜这个问题一直没搜到或者说没什么实际意义,最后还得研究代码,希望我写的能帮助到别人(ˇˍˇ) 想~。
java.lang.IllegalStateException: Fragment null must be a public static class to be properly recreated from instance state.
相关文章推荐
- android 升级 必须在同一个开发工具生成的编译包
- Android操作系统在Ubuntu8.04LTS上的编译步骤和遇到的问题 (1)
- android 交叉编译工具的认识
- 64bits Ubuntu下编译Android的步骤,所遇到的问题和解决方法
- Android OTA 升级之一:编译升级包
- 谈谈今天遇到的编译工具查错的问题
- 编译升级linux由2.4.20-8到2.6.10内核时,遇到的错误,以及解决方法
- 编译android kernel遇到的问题
- Android升级到2.3之后遇到的问题
- android中导入低版本project可能会遇到的编译问题
- ubuntu11.0.4下编译Android2.3源码过程遇到问题解决【不断更新】
- ubuntu9.04下编译android源码遇到的问题
- Android反编译工具apktool
- 编译android sdk 遇到的问题
- 【转】Android OTA 升级之一:编译升级包
- android powerpc平台交叉编译工具生成 (1)
- 编译android 2.2时遇到一个错误
- android 源码编译遇到得一些问题
- 搭建arm-linux-gcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)
- ubuntu11.0.4下编译Android2.3源码过程遇到问题解决【不断更新】