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屬性,不然切換橫豎屏仍會執行生命週期

相關文章
相關標籤/搜索