Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android橫屏下Fragment界面重疊問題,androidfragment

Android橫屏下Fragment界面重疊問題,androidfragment

編輯:關於android開發

Android橫屏下Fragment界面重疊問題,androidfragment


前言:

項目是基於平板開發的,設計的界面是要求橫屏展示界面。所以我將所有的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屬性,否則切換橫豎屏仍會執行生命周期

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved