Android横屏下Fragment界面重叠问题
前言:
项目是基于平板开发的,设计的界面是要求横屏展示界面。所以我将所有的Activity都强制设置为横屏
android:screenOrientation="landscape"
-----------------------------------------------------------------------------------------------------
问题:
主界面,最常见的Activity+n个Fragment
我这里使用的hide、show Fragment的方式来切换Fragment,当关闭手机、平板屏幕再打开,会发现Fragment界面重叠
安卓开发_慕课网_Fragment实现Tab(App主界面)
-----------------------------------------------------------------------------------------------------
1、先通过界面来了解具体情况
界面左侧是4个Tab按钮,对应四个Fragment界面,如下面两个图 ,是正常的界面显示效果,这里我已经将这个Activity强制为横屏显示
2、正常情况下,我这个时候关闭了屏幕,然后在打开屏幕,可以看到 这个时候会显示 之前打开过的Fragment界面,导致界面重叠
此时,我们测试将activity横屏显示去掉,让他竖屏显示,然后在进行关屏幕,打开屏幕操作,会发现 在竖屏的情况下,并没有发生界面重叠的问题。
那么我们就可以猜出问题所在了:生命周期
3、接着我们给Activity的onCreate() onResume()方法 Fragment的onCreateView() onResume()方法打印Log
(1)看我们关闭屏幕的时候执行的生命方法
这里我们可以看到,当我们关闭屏幕的时候,很显然Activity又执行了一遍生命周期
(2)在看我们打开屏幕的时候执行的生命方法
可以看到,Activity又执行了一次onCreate()方法,而Fragment执行了多次onCreateView()
总结一下:锁屏关闭屏幕后,Activity会由横屏切换为竖屏,这个时候执行了onCreate()方法,但是Activity原来对应的Fragment并没有被销毁,(导致第一张生命周期图中 今日任务Fragment执行了两次onresume,因为新建了一个和原来未被销毁的一个,此时存在两个今日任务Fragment), 解屏打开屏幕后,Activity又有竖屏切换为横屏(我们强制设置的横屏显示),又执行了onCreate()方法,导致又创建了一次Fragment,但是原来的Fragment还是没有被销毁(所以第二章生命周期图中,我们可以看到此时存在了3个今日任务Fragement的onResume()方法)。那么最终就会导致打开屏幕后 之前所有未被销毁的Fragment都显示出来。
解决方法:
我们不让开关屏幕的时候Activity走生命周期,那么在清单文件中给Activity设置下面这两个属性即可
android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden|screenSize"
注意:4.0以上的configChanges需要添加screenSize属性,否则切换横竖屏仍会执行生命周期
Android横屏下Fragment界面重叠问题的更多相关文章
- Android 使用Fragment界面向下跳转并一级级返回
http://www.cnblogs.com/_ymw/p/4227862.html 1.首先贴上项目结构图: 2.先添加一个接口文件BackHandledInterface.java,定义一个set ...
- [转]Android 使用Fragment界面向下跳转并一级级返回
1.首先贴上项目结构图: 2.先添加一个接口文件BackHandledInterface.java,定义一个setSelectedFragment方法用于设置当前加载的Fragment在栈顶,主界 ...
- Android应用经典主界面框架之中的一个:仿QQ (使用Fragment, 附源代码)
备注:代码已传至https://github.com/yanzi1225627/FragmentProject_QQ 欢迎fork,如今来审视这份代码,非常多地方写的不太好,欢迎大家指正.有时间我会继 ...
- Android Fragment学习笔记(二)----Fragment界面添加和管理
Fragment界面添加 了解过fragment的生命周期等简单知识,于是去看官方文档来了解更多相关内容,要添加fragment到我们的UI界面中,给出了两种常用的方法,第一个是在activity的布 ...
- Android 自学之基本界面组件(下)
按钮(Button)与图片按钮(ImageButton)组件的功能和用法 Button继承了TextView,ImageButton继承了Button.不管是Button还是ImageButton,他 ...
- Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)
另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...
- Android控件-Fragment+ViewPager(高仿微信界面)
什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个 ...
- [Android] Android 手机下 仿 微信 客户端 界面 -- 微聊
Android 手机下 仿 微信 客户端 界面 -- 微聊 (包括聊天列表 + 聊天对话页 + 朋友圈列表页 + 我的/发现 列表页) 项目演示: 功能说明: 1)底部标签切换 (TabHost + ...
- Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml
Android开发:碎片Fragment完全解析 为了让界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,它非常类似于Activity,可以像 Activi ...
随机推荐
- Neutron Vlan Network 原理- 每天5分钟玩转 OpenStack(92)
前面我们陆续学习了 Neutron local network,flat network 和 DHCP 服务,从本节将开始讨论 vlan network. vlan network 是带 tag 的网 ...
- Perl碎碎念
1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(<>){ chomp; print "$_\n" unless ...
- EF Code First 主键对应多个外键
这是一位朋友提出的疑问,EF 映射主键可以对应多个外键吗?如果外键设置级联删除会发生什么情况?下面做一个测试,示例实体代码: public class Blog { public Blog() { P ...
- andriod 手机按键检测事件 onKeyDown() 简述
函数原型: public boolean onKeyDown(int keyCode, KeyEvent event); 第一个参数是用户按下键时,当前所接收到的按键代号: 第二个参数是按键事件的对象 ...
- ZOJ Problem Set - 1109 Language of FatMouse
这道题目最让人头疼的就是该题的input怎么结束,因为它要求输入一个空行的时候则一串字符串输入结束,这就不得不让人绕个弯来解决这个问题. (注:本人习惯于使用C中的字符串操作,但是用到map要求使用s ...
- 导入android-support-v4.jar的方法
在导入使用了ViewPage,ActionBar,Fragment的工程后出现错误,很有可能是没有导入4.0版本的支持包. 正确导入方法为: 首先在Project->properties-> ...
- 原来css中的border还可以这样玩
原来css中的border还可以这样玩 前面的话: 在看这篇文章之前你可能会觉得border只是简单的绘制边框,看了这篇文章,我相信你也会跟我一样说一句"我靠,原来css中的border还可 ...
- 在ASP.NET Core使用Middleware模拟Custom Error Page功能
一.使用场景 在传统的ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAtt ...
- EF中的实体类型【Types of Entity in Entity】(EF基础系列篇8)
We created EDM for existing database in the previous section. As you have learned in the previous se ...
- ASP.NET MVC过滤器
在ASP.NET MVC中有个重要特性就是过滤器,使得我们在MVC程序开发中更好的控制浏览器请求的URL,不是每个请求都有响应内容,只有特定得用户才有.园子里关于过滤器的资料也有很多,这篇文章主要是记 ...