學(xué)習(xí)Android官方文檔(二)--Fragment

1、Fragment的創(chuàng)建

(1)盡量使用v4包中的Fragment

(2)必須重寫onCreateView()方法,使用inflater,從xml布局文件加載一個布局并返回。

注意:

1)傳遞至onCreateView()的container參數(shù)是您的 Fragment 布局將插入到的父?ViewGroup(來自 Activity 的布局)。savedInstanceState參數(shù)是在恢復(fù) Fragment 時,提供上一 Fragment 實(shí)例相關(guān)數(shù)據(jù)的Bundle處理 Fragment 生命周期部分對恢復(fù)狀態(tài)做了詳細(xì)闡述)。

2)inflate(int resource,ViewGroup root, boolean attachToRoot)方法帶有三個參數(shù):

resource:您想要擴(kuò)展的布局的資源 ID;

root:將作為擴(kuò)展布局父項(xiàng)的ViewGroup。傳遞container對系統(tǒng)向擴(kuò)展布局的根視圖(由其所屬的父視圖指定)應(yīng)用布局參數(shù)具有重要意義;

attachToRoot:指示是否應(yīng)該在擴(kuò)展期間將擴(kuò)展布局附加至ViewGroup(第二個參數(shù))的布爾值。(在本例中,其值為 false,因?yàn)橄到y(tǒng)已經(jīng)將擴(kuò)展布局插入container— 傳遞 true 值會在最終布局中創(chuàng)建一個多余的視圖組。)

(3)傳參

一般使用 Fragment,直接使用 new,如果有參數(shù),直接在構(gòu)造方法中傳入。但這樣會有問題,比如當(dāng)屏幕方向發(fā)生變化,F(xiàn)ragment 中的數(shù)據(jù)就會丟失。原因是系統(tǒng)會重新構(gòu)造一個新的 Fragment,調(diào)用的是無參的構(gòu)造方法,因此你傳入的數(shù)據(jù)都會丟失。

解決方案:使用 Fragment.setArguments(Bundle) 進(jìn)行傳參。因?yàn)?Bundle 會被保存下來,當(dāng)重新構(gòu)建 Fragment 時,Bundle 仍然有效。

2、Fragment與Activity生命周期對應(yīng)關(guān)系


3、Fragment管理及其事務(wù)

(1)Fragment管理使用FragmentManager,可從Activity中調(diào)用getSupportFragmentManager() 來獲取。

(2)Fragment事務(wù)使用FragmentTransaction來完成,調(diào)用add()、remove()replace()等方法為給定事務(wù)設(shè)置您想要執(zhí)行的所有更改。然后,要想將事務(wù)應(yīng)用到 Activity,您必須調(diào)用commit()。

FragmentTransaction可以通過FragmentManager.beginTransaction()來獲取。

4、與Activity之間通信

(1)簡單的:Fragment可以通過getActivity()來訪問Activity,Activity也可以通過findFragmentById()或Tag的方式訪問Fragment,當(dāng)然亦可以通過FragmentManager。

(2)重點(diǎn):使用回調(diào)的方式

在某些情況下,您可能需要通過 Fragment 與 Activity 共享事件。執(zhí)行此操作的一個好方法是,在 Fragment 內(nèi)定義一個回調(diào)接口,并要求宿主 Activity 實(shí)現(xiàn)它。 當(dāng) Activity 通過該接口收到回調(diào)時,可以根據(jù)需要與布局中的其他 Fragment 共享這些信息。

步驟:

1)Fragment 創(chuàng)建回調(diào)接口,并保留一個引用 mCallBack

2)宿主 Activity 實(shí)現(xiàn)回調(diào)接口

3)通過 Fragment 的 onAttach(Activity activity) 方法實(shí)例化 mCallBack

4)在 Fragment 中觸發(fā)響應(yīng)事件時,調(diào)用接口方法,實(shí)現(xiàn)共享信息

以上所有均參考Android開發(fā)者--Fragment文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容