當前位置:首頁 » 安卓系統 » android彈出fragment

android彈出fragment

發布時間: 2025-10-16 05:10:18

① Android入門教程 | DialogFragment 的使用

DialogFragment的使用教程如下

  1. DialogFragment簡介

    • DialogFragment是Android 3.0版本引入的特殊Fragment,用於在Activity上展示模態對話框。
    • 彈窗作為常見提示方式,在Android開發中扮演重要角色,DialogFragment提供了一種更靈活和強大的方式來創建和管理彈窗。
  2. 創建DialogFragment

    • 新建一個類,繼承自DialogFragment。
    • 在這個類中,可以重寫onCreateDialog或onCreateView方法來定義彈窗的UI和內容。
    • onCreateDialog方法適用於簡單的對話框,可以直接通過AlertDialog.Builder來構建。
    • onCreateView方法則適用於需要更復雜布局的對話框,可以通過載入布局文件來實現。
  3. 展示DialogFragment

    • 調用DialogFragment的show方法,傳入FragmentManager和可選的tag,即可展示彈窗。
    • FragmentManager用於管理Fragment的事務,包括添加、移除、替換等。
    • tag是一個可選的字元串,用於標識這個DialogFragment,方便後續的操作,如移除或查找。
  4. 運行代碼查看效果

    • 編寫完DialogFragment的代碼後,運行應用程序,查看彈窗的效果是否符合預期。
    • 根據實際效果,調整布局文件或DialogFragment的代碼,以達到滿意的彈窗效果。
  5. 學習資源推薦

    • 對於初學者來說,推薦學習Android零基礎入門到精通的完整教程,這些教程包含了Android Studio安裝、全套Android基礎教程、java語言基礎、Kotlin語言基礎等必要知識。
    • 觀看安裝教程視頻,按照步驟操作,可以順利安裝Android Studio。
    • 通過視頻學習Android開發基礎,圖書可以用於查漏補缺和深入學習。
    • 掌握Android開發基礎後,可以進一步學習四大組件使用、創建Service、布局設計、自定義View、動畫、網路通信等技術。

通過以上步驟,你可以掌握DialogFragment的基本使用方法,並在Android應用程序中創建出美觀且功能強大的彈窗。

② Android組件之Fragment(一)---基礎知識與運用

Fragment是Android3.0後引入的一個新的API,他出現的初衷是為了適應大屏幕的平板電腦, 當然現在他仍然是平板APP UI設計的寵兒,而且我們普通手機開發也會加入這個Fragment, 我們可以把他看成一個小型的Activity,又稱Activity片段!想想,如果一個很大的界面,我們 就一個布局,寫起界面來會有多麻煩,而且如果組件多的話是管理起來也很麻煩!而使用Fragment 我們可以把屏幕劃分成幾塊,然後進行分組,進行一個模塊化的管理!從而可以更加方便的在 運行過程中動態地更新Activity的用戶界面!另外Fragment並不能單獨使用,他需要嵌套在Activity 中使用,盡管他擁有自己的生命周期,但是還是會受到宿主Activity的生命周期的影響,比如Activity 被destory銷毀了,他也會跟著銷毀!

引用官方的一張圖片,其實已經說明問題了,就是為了更好的適配大屏,在大屏的時候,不需要去在一個activity內部通過復雜的布局和界面去實現,只需要去在一個activity內部,通過多個fragment來做界面布局實現即可,而且針對於多個fragment來說, 每個fragment有單獨的生命周期,

Demo樣例,我們在一個界面中,有上下兩個fragment,如圖所示:

Step 2: Fragment創建,視圖載入,數據賦值
BlankFragment .java

Step 3: Activity在onCreate( )方法中調用setContentView()之後調用FragmentTransaction 進行事務提交
FragmentTestActivity.java

在xml中聲明兩個fragment,指定為具體的fragment

Step 1:定義Fragment的布局,就是fragment顯示內容的

Step 2:自定義一個Fragment類,需要繼承Fragment或者他的子類,重寫onCreateView()方法 在該方法中調用:inflater.inflate()方法載入Fragment的布局文件,接著返回載入的view對象
BlankFragment.java

Step 3:在需要載入Fragment的Activity對應的布局文件中添加fragment的標簽, 記住,name屬性是全限定類名哦,就是要包含Fragment的包名,如:

Step 4: Activity在onCreate( )方法中調用setContentView()載入布局文件即可!

針對在一個Activity中的某個Layout中切換Fragment,,無非兩種方法:

我們自己看一下方法注釋

源碼方法注釋裡面說的很明白,這個方法會移除所有的fragment,然後添加當前的fragment。
這時分為兩種情況,一種是fragment已有並且在前台展示,一種是未有或者在後台,針對於前者,此時replace,生命周期不會發生變化,針對後者,生命周期會重新走

分為兩種情況,一種fragment已存在,一種未存在,針對於前者,生命周期無變化,但是會回調onHiddenChanged方法,針對於後者,生命周期會創建一次。

1.Fragment是Google官方引入的一個為了適配大屏、多頁面的一個組件。您可以理解為它就是一個類而已,只不過裡麵包含了View,並且與activity的生命周期進行了關聯。
2.動態載入與靜態載入相對來說,建議使用動態載入,靜態載入固定在了xml文件中,永遠不變。
3.replace的fragment如果不在前台,會執行所有生命周期,反之不會執行任何生命周期方法;hide+show生命周期並不會發生變化,但是會回調onHiddenChanged方法,在實際開發中,建議add之後,使用hide+show來操作fragment,一方面減少資源的重復載入和創建,另外一方面提升用戶體驗感。
4.fragment的生命周期大體上和activity一致,但是前期和後期多了一些東西,因為fragment內部有view,那麼這個view需要進行創建、然後添加到activity內部,所以相應的在onCreate與onStart之間就多了幾個方法-onCreateView、onViewCreated。相同的道理,fragment的view與activity解綁,也相應的在onStop與onDestory之間多個方法-onDestroyView。onAttach與onDetach可以理解為視圖與activity產生關聯和接觸關聯,是最開始和最後的步驟。

Demo地址

③ Android屏幕變化引起Fragment折疊的解決辦法

奇葩問題年年有,今天又碰到一個,最近呢,在項目開發維護中遇到這樣一個bug,vivo某某型號手機,三指頭同時下滑,瞅瞅效果圖,屏幕露出半個桌面來,而我們的應用布局發生重疊,不得不佩服我們的測試小姐姐,這樣奇葩問題,你都找得到,怎麼辦呢,網路谷歌唄!

這樣子,在當前頁面的Activity中的onCreate方法中輸出日誌,當頁面首次打開的時候有日誌輸出,當三個手指下滑的時候,又有日誌輸出,ok,到這里問題已經明朗,Activity重新創建了,顯然因為生命周期方法重復執行導致它承載的Fragment出現了布局折疊問題。
當手機屏幕變化笑銀培,比如橫豎屏切換,布局變化,屏幕尺寸改變等,在不經過設搏仿置時activity會被重新啟動創建,而且還不止一次,而要防止這碰唯個現象的發生,就需要配置configChanges這個屬性了。

找到了原因,那麼開始實施解決方案。
在AndroidManifest.xml中配置configChanges這個屬性如下

當配置完成後,再次發布程序到手機,日誌不在重復列印,頁面也能夠正常顯示。

這樣配置
android:configChanges="orientation"
那麼橫豎屏切換時就不會重新創建activity,那麼這個屬性到底是什麼意思呢?
首先,要了解Android默認在情況下,在系統的配置改變的情況下會重新創建activity,這個很好理解,因為系統環境變了,當然要重新創建activity來適應這個改變嘍。但是在很多時候我們不想在系統配置改變時重新載入activity,那麼就需要
android:configChanges=「xxx|xxx」這個樣子來搞定了。這里的xxx表這不同的系統配置的改變。
這里的xxx包含了很多種,就像我上邊寫的,可以用|來連接多個值。下面簡單介紹下各個值的不同含義:

喝飽水,閉上嘴,往前走,靠雙腿。

④ Android開發 :Fragment懶載入的幾種方式與性能對比

TabLayout+ViewPager+Fragment是我們開發常用的組合。ViewPager的默認機制就是把全部的Fragment都載入出來,而為了保障一些用戶體驗,我們使用懶載入的Fragment,就是讓我們再用戶可見這個Fragment之後才處理業務邏輯。

而我們在一些設備或版本中可能就出現懶載入失效的問題。其實谷歌早就把一些懶載入的方案都標記棄用了,我們一直都用的老的隨時會失效的Api。萬一哪天徹底失效了就會導致線上事故。

接下來我們就看看Fragment的懶載入是如何演變的。谷歌又是推薦我們如何使用的。

在AndroidX還沒出來的時候,大家的懶載入應該都是這樣。判斷setUserVisibleHint的方法,當用戶可見的時候才回調方法去載入邏輯。

例如的我封裝:

使用的示例:

擴展方法:

Fragment:

到此就實現了onLazyInitData的回調,只有出現Fragment顯示在前台的時候才會調用方法,執行邏輯。

每次判斷 setUserVisibleHint 和 onHiddenChanged 也麻煩,並且他們並不穩定,我也遇到過不回調的時候。

Android出來之後,給 FragmentStatePagerAdapter 添加了一個 @Behavior int behavior 的參數。

其本質就是內部幫你處理和切換MaxLifecycle:

如何使用呢:

之前的擴展方法以及預留了 behavior 參數,當為1的時候就不會回調 setUserVisibleHint 方法了,我們直接監聽 OnResume 即可。

注意這個頁面繼承的就不是我們自定義的懶載入Fragment了。普通的Fragment 回調 onResume 即可。

ViewPager2出來之後。我們的 FragmentStatePagerAdapter 退出歷史舞台。

即便能用,即便效果還是和ViewPage2的效果一樣,但是還是標記廢棄了。具體原因我也不知道,據說是因為老版本會出現問題導致數據丟失,頁面空白。

ViewPage2我們都知道內部是通過RV實現的。但是對於Fragment的處理有單獨的Adapter實現。

擴展方法:

使用:

使用的方式和ViewPager差不多,這里的Fragment也是使用普通的Fragment即可。

內存佔用分別取三組數據

ViewPager數據

ViewPager2數據

結論 ViewPager2基於RV實現的效果還是比老版ViewPager要騷好一點。

並且老版本標記廢棄,大家如果是用ViewPager2的話,還是推薦使用ViewPager2實現。如果大家還是用的老版本的ViewPager也推薦使用behavor參數。使用 onResume 實現懶載入的實現。以後再換到ViewPager2的話,可以無縫切換過來。

說明一下,測試數據僅供參考,畢竟我也不是專業測試,測試數據源也不不多。如有不對的地方,也望大家指正。

熱點內容
115安卓同時下載的文件在哪裡 發布:2025-10-16 08:05:34 瀏覽:411
python拋出異常 發布:2025-10-16 07:42:12 瀏覽:368
雲伺服器可以用幾個ip 發布:2025-10-16 07:42:07 瀏覽:237
c語言讀取txt文件到數組 發布:2025-10-16 07:12:52 瀏覽:798
的訪問修飾符 發布:2025-10-16 07:00:42 瀏覽:322
shell定時腳本 發布:2025-10-16 06:59:13 瀏覽:219
java中加 發布:2025-10-16 06:54:56 瀏覽:962
fifo存儲器晶元 發布:2025-10-16 06:54:14 瀏覽:953
sql2005卸載干凈 發布:2025-10-16 05:35:19 瀏覽:855
java清空控制台 發布:2025-10-16 05:21:37 瀏覽:254