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屬性,否則切換橫豎屏仍會執行生命周期


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM