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
public
class
contentfragment 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 =
new
contentfragment();
fragmenttransaction.add(r.id.parenttest, fragment);
fragmenttransaction.commit();
結果如下:
基本操作的就是新增,替換,刪除(如果是定義在xml檔案中的是不可以刪除的)
自定義的新增: 1
2
3
4
5
fragmenttransaction fragmenttransaction = getfragmentmanager()
.begintransaction();
contentfragment fragment =
new
contentfragment();
fragmenttransaction.add(r.id.parenttest, fragment);
fragmenttransaction.commit();
替換: 1
2
3
4
5
fragmenttransaction fragmenttransaction = getfragmentmanager()
.begintransaction();
titlefragment fragment =
new
titlefragment();
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的字段值將會全部...