Fragment 横竖屏切换问题
class MyFragment { public MyFragment(int title, String message){} public static final MyFragment newInstance(int title, String message) {MyFragment f = new MyFragment (int title, String message);return f; } }
这时候当横竖屏切换时由于MyFragment没有默认构造函数,将抛出java.lang.InstantiationException异常,正确的方式为使用Bundle来进行参数传递修改如下:
class MyFragment { private static final String TITLE="title",MESSAGE="message"; private String title,message; public void onCreate(Bundle saveInstanceState){title = getArguments().getString(TITLE);message = getArguments().getString(MESSAGE); } public static final MyFragment newInstance(int title, String message) {MyFragment f = new MyFragment (int title, String message);Bundle bdl = new Bundle(2);bdl.setString(TITLE,title);bdl.setString(MESSAGE,message);f.setArguments(bdl);return f; } }
通过这种方式创建的Fragment在横竖屏切换时通过getArguments依然能够获得之前设置的数据,其原理是在FragmentActivity切换时会调用onRetainNonConfigurationInstance方法将FragmentManager中管理的所有Fragment及其状态数据(其中就包括了这个设置的Bundle)保存在一个FragmentActivity.NonConfigurationInstances对象实例中,这样在新的FragmentActivity启动时在onCreate方法中可以使用Activity.getLastNonConfigurationInstance()方法来获取这个对象,然后通过FragmentManager.restoreAllState方法还原所有Fragment及其状态,需要注意的是在这种情况下可能会出现之前的Fragment没有detach而处于活动状态导致该Fragment的视图生成,可能会造成两个Fragment视图重叠的情况,在官方的Support.v4的例子中FragmentTabs.TabManager.addTab里有一段检查Fragment是否detach的代码正是用于解决这个问题。
通过上面的处理基本是没问题了,但因为默认情况下横竖屏切换后整个FragmentActivity会被销毁并重建,所有Fragment中的成员变量也会丢失,但所有的Fragment状态数据如上所述会被保留并还原,这个时候所有的视图都会重新创建。
解决方法一:在相应的Activity配置中加上android:configChanges="orientation|keyboardHidden"设置,这样切换时就不会销毁FragmentActivity,所有的Fragment的状态及视图也就会保持。
解决方法二:在使用FragmentTransaction.add()方法添加fragment时设置第三个tag参数,随后在还原时可通过FragmentManager.findFragmentByTag()方法找回还原的fragment.
转载于:https://www.cnblogs.com/wjhblogs/p/4688921.html
Fragment 横竖屏切换问题相关推荐
- Fragment横竖屏切换
竖屏 横屏 程序结构 创建一个横屏LinearLayout ContentActivity.java public class ContentActivity extends FragmentActi ...
- Android 横竖屏切换
2019独角兽企业重金招聘Python工程师标准>>> Android开发中,大多APP可能根据实际情况直接将APP的界面方向设死了,或竖屏或横屏.但是,我们还是会遇到横竖屏切换的功 ...
- android切换横竖,Android横竖屏切换工具
Android在横竖屏切换的时候有很多细节需要处理,尤其做视频播放的时候,下面的工具类能较完美的解决横竖屏切换场景,不管是Activity和Fragment都能灵活控制,用法简单. 1.在系统屏幕旋转 ...
- Compose 横竖屏切换时状态如何保存?rememberSaveable 实现原理分析
前言 在这篇文章中提到了 Navigation 的状态保存实际是由 rememberSaveable 实现的,有同学反馈希望单独介绍一下 rememberSaveable 的功能及实现原理.我们都知道 ...
- widget中自动横竖屏切换时的问题
首页 Android开发者社区 Android百科 极客学院 开启辅助访问 打卡签到 我要上头条 如何赚e币 注册验证问题 版主申请 切换到宽版 帐号 自动登录 找回密码 密码 登录 加入eoe ...
- android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解
本文为大家分享了Android横竖屏切换及其对应布局加载问题,供大家参考,具体内容如下 第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同 ...
- android横竖屏切换生命周期
前段时间在做项目的时候发现一个很奇怪的现象,在应用中按下锁屏键后再解锁,发现应用自动结束了.一开始以为是占用内存太多系统结束了应用,后来感觉这个很影响用户体验,决定自己查一下这个问题的根源. 仔细阅读 ...
- android的横竖屏切换,Android横竖屏切换 初步探究
当手机横竖屏切换的时候,activity,默认会重新走一遍生命周期,即销毁当前,然后重新创建 首先,很多软件在设计和开发中为了避免横竖屏切换时引发不必要的麻烦,通常需要让App禁止掉横竖屏的切换,这就 ...
- android 模拟器横竖屏切换
android 模拟器横竖屏切换 今天在做android实验的时候,由于遇到要横竖屏切换,所以去网上找了一下这样的方法: 找到以下方法: 1.通过ctrl + F11 或者 ctrl + ...
最新文章
- Django博客系统(首页用户名展示)
- 使用jquery实现的计算器功能
- 华为nova5ipro的优缺点_华为nova5pro和nova5i的区别
- XCTF-MISC-新手区-功夫再高也怕菜刀
- Mybatis—注解开发
- 机器学习实战 | SKLearn最全应用指南
- 你有什么难忘的出差经历?
- Python快速转换numpy数组中Nan和Inf的方法
- 织梦dedecms怎么让图片自适应屏幕大小
- 单片机应用系统设计技术——多功能出租车计费器
- World从任意页开始设置页码详细教程
- Linux系统查看CPU个数超线程线程数
- 蓝牙核心规范(V5.2)3.2-深入详解之数据传输架构
- mac关闭渐隐和弹出动画效果
- Windows 筛选平台 (WFP)
- Angular入门-Hero Editor抽丝
- 基于thinkphp5的简单的下拉菜单二级联动
- 【奥斯卡理财星体系 第五章】丨手把手教你从零开始搭建资产配置
- BDH,CDH,DDH,DLP是什么?
- 用uc浏览器Scheme打开网址方法
热门文章
- python 控制有线网卡_Python 使用指定的网卡发送HTTP请求的实例
- 422器件与lvds接收器的区别_SPI、I2C、UART三种串行总线的原理、区别
- Android接入热敏打印机,Android 关于佳博和汉印蓝牙热敏打印机开发
- 联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...
- [渝粤教育] 郑州航空工业管理学院 航空概论 参考 资料
- [渝粤教育] 广东-国家-开放大学21秋期末考试中国近现代史纲要(A)10881k1
- 【渝粤教育】电大中专电子商务网站建设与维护 (21)作业 题库
- 【渝粤教育】电大中专学习指南_1作业 题库
- 【渝粤题库】国家开放大学2021春2238个案工作题目
- SX1280抗WIFI强干扰电磁环境能力解析