在默认情况下当发生横竖屏切换时,当前Activity中的fragment都会通过Fragment.instantiate重新生成,该方法将使用默认的构造函数来生成相应的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 横竖屏切换问题相关推荐

  1. Fragment横竖屏切换

    竖屏 横屏 程序结构 创建一个横屏LinearLayout ContentActivity.java public class ContentActivity extends FragmentActi ...

  2. Android 横竖屏切换

    2019独角兽企业重金招聘Python工程师标准>>> Android开发中,大多APP可能根据实际情况直接将APP的界面方向设死了,或竖屏或横屏.但是,我们还是会遇到横竖屏切换的功 ...

  3. android切换横竖,Android横竖屏切换工具

    Android在横竖屏切换的时候有很多细节需要处理,尤其做视频播放的时候,下面的工具类能较完美的解决横竖屏切换场景,不管是Activity和Fragment都能灵活控制,用法简单. 1.在系统屏幕旋转 ...

  4. Compose 横竖屏切换时状态如何保存?rememberSaveable 实现原理分析

    前言 在这篇文章中提到了 Navigation 的状态保存实际是由 rememberSaveable 实现的,有同学反馈希望单独介绍一下 rememberSaveable 的功能及实现原理.我们都知道 ...

  5. widget中自动横竖屏切换时的问题

    首页 Android开发者社区 Android百科 极客学院 开启辅助访问 打卡签到 我要上头条 如何赚e币 注册验证问题 版主申请 切换到宽版 帐号 自动登录  找回密码 密码 登录  加入eoe ...

  6. android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解

    本文为大家分享了Android横竖屏切换及其对应布局加载问题,供大家参考,具体内容如下 第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同 ...

  7. android横竖屏切换生命周期

    前段时间在做项目的时候发现一个很奇怪的现象,在应用中按下锁屏键后再解锁,发现应用自动结束了.一开始以为是占用内存太多系统结束了应用,后来感觉这个很影响用户体验,决定自己查一下这个问题的根源. 仔细阅读 ...

  8. android的横竖屏切换,Android横竖屏切换 初步探究

    当手机横竖屏切换的时候,activity,默认会重新走一遍生命周期,即销毁当前,然后重新创建 首先,很多软件在设计和开发中为了避免横竖屏切换时引发不必要的麻烦,通常需要让App禁止掉横竖屏的切换,这就 ...

  9. android 模拟器横竖屏切换

    android 模拟器横竖屏切换 今天在做android实验的时候,由于遇到要横竖屏切换,所以去网上找了一下这样的方法: 找到以下方法: 1.通过ctrl  +  F11  或者  ctrl  +   ...

最新文章

  1. Django博客系统(首页用户名展示)
  2. 使用jquery实现的计算器功能
  3. 华为nova5ipro的优缺点_华为nova5pro和nova5i的区别
  4. XCTF-MISC-新手区-功夫再高也怕菜刀
  5. Mybatis—注解开发
  6. 机器学习实战 | SKLearn最全应用指南
  7. 你有什么难忘的出差经历?
  8. Python快速转换numpy数组中Nan和Inf的方法
  9. 织梦dedecms怎么让图片自适应屏幕大小
  10. 单片机应用系统设计技术——多功能出租车计费器
  11. World从任意页开始设置页码详细教程
  12. Linux系统查看CPU个数超线程线程数
  13. 蓝牙核心规范(V5.2)3.2-深入详解之数据传输架构
  14. mac关闭渐隐和弹出动画效果
  15. Windows 筛选平台 (WFP)
  16. Angular入门-Hero Editor抽丝
  17. 基于thinkphp5的简单的下拉菜单二级联动
  18. 【奥斯卡理财星体系 第五章】丨手把手教你从零开始搭建资产配置
  19. BDH,CDH,DDH,DLP是什么?
  20. 用uc浏览器Scheme打开网址方法

热门文章

  1. python 控制有线网卡_Python 使用指定的网卡发送HTTP请求的实例
  2. 422器件与lvds接收器的区别_SPI、I2C、UART三种串行总线的原理、区别
  3. Android接入热敏打印机,Android 关于佳博和汉印蓝牙热敏打印机开发
  4. 联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...
  5. [渝粤教育] 郑州航空工业管理学院 航空概论 参考 资料
  6. [渝粤教育] 广东-国家-开放大学21秋期末考试中国近现代史纲要(A)10881k1
  7. 【渝粤教育】电大中专电子商务网站建设与维护 (21)作业 题库
  8. 【渝粤教育】电大中专学习指南_1作业 题库
  9. 【渝粤题库】国家开放大学2021春2238个案工作题目
  10. SX1280抗WIFI强干扰电磁环境能力解析