當前位置:首頁 » 安卓系統 » android動態添加fragment

android動態添加fragment

發布時間: 2025-09-24 23:06:36

1. 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地址

2. 在Android開發中fragment有什麼優缺點

自從Android 3.0中引入fragments 的概念,根據詞海的翻譯可以譯為:碎片、片段。其目的是為了解決不同屏幕分辯率的動態和靈活UI設計。大屏幕如平板小屏幕如手機,平板電腦的設計使得其有更多的空間來放更多的UI組件,而多出來的空間存放UI使其會產生更多的交互,從而誕生了fragments 。

fragments 的設計不需要你來親自管理view hierarchy 的復雜變化,通過將Activity 的布局分散到frament 中,可以在運行時修改activity 的外觀,並且由activity 管理的back stack 中保存些變化。當一個片段指定了自身的布局時,它能和其他片段配置成不同的組合,在活動中為不同的屏幕尺寸修改布局配置(小屏幕可能每次顯示一個片段,而大屏幕則可以顯示兩個或更多)。

Fragment必須被寫成可重用的模塊。因為fragment有自己的layout,自己進行事件響應,擁有自己的生命周期和行為,所以你可以在多個activity中包含同一個Fragment的不同實例。這對於讓你的界面在不同的屏幕尺寸下都能給用戶完美的體驗尤其重要。

Fragment優點

Fragment可以使你能夠將activity分離成多個可重用的組件,每個都有它自己的生命周期和UI。

Fragment可以輕松得創建動態靈活的UI設計,可以適應於不同的屏幕尺寸。從手機到平板電腦。

Fragment是一個獨立的模塊,緊緊地與activity綁定在一起。可以運行中動態地移除、加入、交換等。

Fragment提供一個新的方式讓你在不同的安卓設備上統一你的UI。

Fragment 解決Activity間的切換不流暢,輕量切換。

Fragment 替代TabActivity做導航,性能更好。

Fragment 在4.2.版本中新增嵌套fragment使用方法,能夠生成更好的界面效果。

Fragment做局部內容更新更方便,原來為了到達這一點要把多個布局放到一個activity裡面,現在可以用多Fragment來代替,只有在需要的時候才載入Fragment,提高性能。

可以從startActivityForResult中接收到返回結果,但是View不能。

Fragment的生命周期

你可以把fragment看作是activity的模塊化組件,它擁有自己的生命周期

Fragment是activity的界面中的一部分或一種行為。你可以把多個Fragment們組合到一個activity中來創建一個多面界面並且你可以在多個activity中重用一個Fragment。你可以把Fragment認為模塊化的一段activity,它具有自己的生命周期,接收它自己的事件,並可以在activity運行時被添加或刪除。

Fragment不能獨立存在,它必須嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影響。例如:當activity暫停時,它擁有的所有的Fragment們都暫停了,當activity銷毀時,它擁有的所有Fragment們都被銷毀。然而,當activity運行時(在onResume()之後,onPause()之前),你可以單獨地操作每個Fragment,比如添加或刪除它們。當你在執行上述針對Fragment的事務時,你可以將事務添加到一個棧中,這個棧被activity管理,棧中的每一條都是一個Fragment的一次事務。有了這個棧,就可以反向執行Fragment的事務,這樣就可以在Fragment級支持「返回」鍵(向後導航)。

顯示Fragment時(跟用戶交互)要調用的核心的生命周期方法如下:

1. 把Fragment對象跟Activity關聯時,調用onAttach(Activity)方法;

2. Fragment對象的初始創建時,調用onCreate(Bundle)方法;

3. onCreateView(LayoutInflater, ViewGroup, Bundle)方法用於創建和返回跟Fragment關聯的View對象;

4. onActivityCreate(Bundle)方法會告訴Fragment對象,它所依附的Activity對象已經完成了Activity.onCreate()方法的執行;

5. onStart()方法會讓Fragment對象顯示給用戶(在包含該Fragment對象的Activity被啟動後);

6. onResume()會讓Fragment對象跟用戶交互(在包含該Fragment對象的Activity被啟恢復後)。

Fragment對象不再使用時,要反向回調的方法:

1. 因為Fragment對象所依附的Activity對象被掛起,或者在Activity中正在執行一個修改Fragment對象的操作,而導致Fragment對象不再跟用戶交互時,系統會調用Fragment對象的onPause()方法;

2. 因為Fragment對象所依附的Activity對象被終止,或者再Activity中正在執行一個修改Fragment對象的操作,而導致Fragment對象不再顯示給用戶時,系統會調用Fragment對象的onStop()方法。

3. onDestroyView()方法用於清除跟Fragment中的View對象關聯的資源;

4. Fragment對象的狀態被最終清理完成之後,要調用onDestroy()方法;

5. 在Fragment對象不再跟它依附的Activity關聯的時候,onDetach()方法會立即被調用

3. Android 布局framelayout到底怎麼用

在谷歌官方文檔中,幀布局(FrameLayout)的主要用途是放置碎片(Fragment),這是標准做法。幀布局與相對布局(RelativeLayout)的一個共同點是可以在一個控制項上放置另一個控制項,比如在一個ImageView1上放置另一個ImageView2。相對來說,幀布局使用頻率較低,而相對布局(RelativeLayout)和線性布局(LinearLayout)則更常用。

幀布局的特點是將所有的子視圖都放在一個虛擬的矩形區域內,每個子視圖的位置由它的左上角坐標決定。這意味著,如果你在幀布局中添加多個視圖,後添加的視圖會覆蓋前面的視圖。這是一個非常有用的功能,特別是在設計需要動態調整布局的應用時。例如,你可以使用幀布局來實現一個動態的導航欄,其中當前頁面的導航按鈕會覆蓋其他按鈕。

幀布局在Android開發中扮演著重要的角色,尤其是在處理碎片時。通過使用幀布局,可以輕松地將多個碎片組合在一起,形成一個完整的用戶界面。此外,幀布局還支持其他一些高級特性,如動畫效果和視圖可見性管理,這些特性使得幀布局在某些情況下比相對布局或線性布局更為靈活。

盡管幀布局的使用頻率不高,但它仍然是一個非常有用的布局工具。通過合理地利用幀布局的功能,開發者可以創建出更具表現力和靈活性的用戶界面。因此,了解幀布局的工作原理和應用場景,對於提高Android應用開發的質量是非常重要的。

熱點內容
編程菌 發布:2025-09-25 00:39:34 瀏覽:491
java多個介面 發布:2025-09-25 00:34:34 瀏覽:365
帶寬的演算法 發布:2025-09-25 00:32:08 瀏覽:502
CHP演算法 發布:2025-09-25 00:31:13 瀏覽:759
class反編譯為java 發布:2025-09-25 00:25:58 瀏覽:59
盤JAVA 發布:2025-09-25 00:22:50 瀏覽:815
java我的世界怎麼免費開伺服器 發布:2025-09-25 00:00:52 瀏覽:945
婦癌資料庫 發布:2025-09-24 23:53:53 瀏覽:789
fcsan存儲 發布:2025-09-24 23:52:19 瀏覽:940
androidjson數組 發布:2025-09-24 23:41:32 瀏覽:853