Android中Fragment的簡單介紹

2021-09-22 08:43:17 字數 4041 閱讀 5575

android是在android 3.0 (api level 11)引入了fragment的,中文翻譯是片段或者成為碎片(個人理解),

可以把fragment當成activity中的模組,這個模組有自己的布局,有自己的生命週期,單獨處理自己的輸入,在activity執行的時候可以載入或者移除fragment模組。

其中有個經典圖,大家就字面上理解下就行:

可以把fragment設計成可以在多個activity中復用的模組,為了在android上建立動態的、多視窗的使用者互動體驗,你需要將ui元件和activity操作封裝成模組進行使用,在activity中你可以對這些模組進行切入切出操作。可以使用fragment來建立這些模組,如果乙個fragment定義了自己的布局,那麼在activity中它可以與其他的fragments生成不同的組合,從而為不同的螢幕尺寸生成不同的布局(乙個小的螢幕一次只放乙個fragment,大的螢幕則可以兩個或以上的fragment),比如說下圖:

首先,新建乙個布局檔案fragmentcontent.xml

1

2

3

4

5

6

7

8

9

10

11

12

<?xml version="1.0"encoding="utf-8"?>

android:id="@+id/content_container"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:src="@drawable/content"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

這時候與對應的是建立乙個顯示布局檔案的contentfragment類: 1

2

3

4

5

6

7

8

publicclasscontentfragment extends fragment

}

inflate()方法的三個引數:

第乙個是resource id,指明了當前的fragment對應的資源檔案;

第二個引數是父容器控制項;

第三個布林值引數表明是否連線該布局和其父容器控制項,在這裡的情況設定為false,因為系統已經插入了這個布局到父控制項,設定為true將會產生多餘的乙個view group。

如果需要在mainactivity中顯示的話: 1

2

3

4

5

android:id="@+id/fragment1"

android:name="com.example.fragmenttest.contentfragment"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

activity_main.xml中的**為:

+ view code

顯示的結果為:

這個時候可以在mainactivity中加一段**: 1

2

3

4

5

fragmenttransaction fragmenttransaction = getfragmentmanager()

.begintransaction();

contentfragment fragment =newcontentfragment();

fragmenttransaction.add(r.id.parenttest, fragment);

fragmenttransaction.commit();

結果如下:

基本操作的就是新增,替換,刪除(如果是定義在xml檔案中的是不可以刪除的)

自定義的新增: 1

2

3

4

5

fragmenttransaction fragmenttransaction = getfragmentmanager()

.begintransaction();

contentfragment fragment =newcontentfragment();

fragmenttransaction.add(r.id.parenttest, fragment);

fragmenttransaction.commit();

替換: 1

2

3

4

5

fragmenttransaction fragmenttransaction = getfragmentmanager()

.begintransaction();

titlefragment fragment =newtitlefragment();

fragmenttransaction.replace(r.id.fragment1, fragment);

fragmenttransaction.commit();

Android基於介面實現Fragment通訊架構

思想 物件導向 優點 很大程度的解耦 缺點 量很大,不過我會針對缺點進行優化,優化之後的就是現在的架構 實現 谷歌官方規定兩個fregment之間是不可以直接通訊的,所以我們需要經過一層宿主activity,所以點進來的同學絕對是標題吸引到你啦。具體做法是在每個fragment中都定義乙個介面,然後...

Android開發坑系列 之Fragment

這個東西有顧名思義是碎片,和之前的activity對應。坑1 一般情況都會想當然的以為程序被殺掉之後,fragment也會被 其實,fragment有自己的生命週期,有自己的管理器 fragmentmanager 也即 包含fragment的程序被乾掉,fragment不一定會被 而是由fragme...

Activity類動態載入fragment時傳值

當activity類動態載入fragment時可以通過fragment的setarguments 傳入值,並在fragment類中通過fragment的getarguments 方法獲得傳入的值 activity重新建立時,會重新構建它所管理的fragment,原先的fragment的字段值將會全部...