Android Fragment完全解析

2021-07-30 11:38:26 字數 3814 閱讀 7920

為了讓介面可以在平板上更好地展示,android在3.0版本引入了fragment(碎片)功能,它非常類似於activity,可以像activity一樣包含布局。fragment通常是巢狀在activity中使用的,現在想象這種場景:有兩個fragment,fragment 1包含了乙個listview,每行顯示一本書的標題。fragment 2包含了textview和imageview,來顯示書的詳細內容和。

首先需要注意,fragment是在3.0版本引入的,如果你使用的是3.0之前的系統,需要先導入android-support-v4的jar包才能使用fragment功能。

fragment必須是依存與activity而存在的,因此activity的生命週期會直接影響到fragment的生命週期。官網這張圖很好的說明了兩者生命週期的關係:

看到這裡,我相信大多數朋友已經非常明白了,因為這和activity的生命週期太相似了。只是有幾個activity中沒有的新方法,這裡需要重點介紹一下:

onattach方法:fragment和activity建立關聯的時候呼叫。

oncreateview方法:為fragment載入布局時呼叫。

onactivitycreated方法:當activity中的oncreate方法執行完後呼叫。

ondestroyview方法:fragment中的布局被移除時呼叫。

ondetach方法:fragment和activity解除關聯的時候呼叫。

新建乙個專案叫做fragments,然後在layout資料夾下新建乙個名為fragment1.xml的布局檔案:

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#00ff00" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="this is fragment 1"

android:textcolor="#000000"

android:textsize="25sp" />

linearlayout>

可以看到,這個布局檔案非常簡單,只有乙個linearlayout,裡面加入了乙個textview。我們如法炮製再新建乙個fragment2.xml :

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#ffff00" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="this is fragment 2"

android:textcolor="#000000"

android:textsize="25sp" />

linearlayout>

然後新建乙個類fragment1,這個類是繼承自fragment的:

public

class

fragment1

extends

fragment

}

我們可以看到,這個類也非常簡單,主要就是載入了我們剛剛寫好的fragment1.xml布局檔案並返回。同樣的方法,我們再寫好fragment2 :

public

class

fragment2

extends

fragment

}

然後開啟或新建activity_main.xml作為主activity的布局檔案,在裡面加入兩個fragment的引用,使用android:name字首來引用具體的fragment:

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:baselinealigned="false" >

android:id="@+id/fragment1"

android:name="com.example.fragmentdemo.fragment1"

android:layout_width="0dip"

android:layout_height="match_parent"

android:layout_weight="1" />

android:id="@+id/fragment2"

android:name="com.example.fragmentdemo.fragment2"

android:layout_width="0dip"

android:layout_height="match_parent"

android:layout_weight="1" />

linearlayout>

最後開啟或新建mainactivity作為程式的主activity,裡面的**非常簡單,都是自動生成的:

public

class

mainactivity

extends

activity

}

現在我們來執行一次程式,就會看到,乙個activity很融洽地包含了兩個fragment,這兩個fragment平分了整個螢幕,效果圖如下:

你已經學會了如何在xml中使用fragment,但是這僅僅是fragment最簡單的功能而已。fragment真正的強大之處在於可以動態地新增到activity當中,因此這也是你必須要掌握的東西。當你學會了在程式執行時向activity新增fragment,程式的介面就可以定製的更加多樣化。下面我們立刻來看看,如何動態新增fragment。

還是在上一節**的基礎上修改,開啟activity_main.xml,將其中對fragment的引用都刪除,只保留最外層的linearlayout,並給它新增乙個id,因為我們要動態新增fragment,不用在xml裡新增了,刪除後**如下

xmlns:android=""

android:id="@+id/main_layout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:baselinealigned="false" >

linearlayout>

然後開啟mainactivity,修改其中的**如下所示:

public

class

mainactivity

extends

activity else

} }

Android fragment介面通訊

fragment 通過介面呼叫activity方法 在fagment中定義介面 public inte ce callbacks 在attach中將activity傳遞的物件例項化為介面 然後就跟普通的物件呼叫一樣 override public void onattach activity act...

Android Fragment滑動切換

1,因為要進行滑動,所以中文在布局中就進行viewpager布局 android id id vp container android layout width match parent android layout height match parent android.support.v4.vi...

Android Fragment使用簡介

可以在google的 中發現這種寫法,好處是接收確切的引數,返回乙個fragment例項,避免了在建立fragment的時候無法在類外部知道所需引數的問題,在合作開發的時候特別有用。還有就是fragment推薦使用setarguments來傳遞引數,避免在橫豎屏切換的時候fragment自動呼叫自己...