Android横屏下Fragment界面重叠问题

前言:html

项目是基于平板开发的,设计的界面是要求横屏展现界面。因此我将全部的Activity都强制设置为横屏android

android:screenOrientation="landscape"

 

-----------------------------------------------------------------------------------------------------ide

问题:测试

主界面,最多见的Activity+n个Fragment spa

我这里使用的hide、show Fragment的方式来切换Fragment,当关闭手机、平板屏幕再打开,会发现Fragment界面重叠设计

安卓开发_慕课网_Fragment实现Tab(App主界面)3d

 

-----------------------------------------------------------------------------------------------------code

一、先经过界面来了解具体状况htm

界面左侧是4个Tab按钮,对应四个Fragment界面,以下面两个图 ,是正常的界面显示效果,这里我已经将这个Activity强制为横屏显示blog

   

 

二、正常状况下,我这个时候关闭了屏幕,而后在打开屏幕,能够看到 这个时候会显示 以前打开过的Fragment界面,致使界面重叠

 

此时,咱们测试将activity横屏显示去掉,让他竖屏显示,而后在进行关屏幕,打开屏幕操做,会发现 在竖屏的状况下,并无发生界面重叠的问题。

 

那么咱们就能够猜出问题所在了:生命周期

三、接着咱们给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属性,不然切换横竖屏仍会执行生命周期

相关文章
相关标签/搜索