- 常用的一些方法
- 生命周期
- 參考 郭霖大神的 CSDN 、Android Developer
簡介
碎片林束、片段惹恃,F(xiàn)ragment 的翻譯可以讓人直觀的了解到它設(shè)計的思路和用法庇茫。
Android 3.0 以上恃锉。
![from google develop](https://developer.android.com/images/fundamentals/fragments.png)
生命周期及相關(guān)方法
- onAttach(Activity)
Fragment和Activity建立關(guān)聯(lián)的時候調(diào)用搀菩。
- onCreate(Bundle)
系統(tǒng)會在創(chuàng)建片段時調(diào)用此方法。您應(yīng)該在實現(xiàn)內(nèi)初始化您想在片段暫推仆校或停止后恢復(fù)時保留的必需片段組件肪跋。
- onCreateView(LayoutInflater, ViewGroup, Bundle)
系統(tǒng)會在片段首次繪制其用戶界面時調(diào)用此方法。 要想為您的片段繪制 UI炼团,您從此方法中返回的 View 必須是片段布局的根視圖澎嚣。如果片段未提供 UI,您可以返回 null瘟芝。
- onActivityCreated(Bundle)
當(dāng)Activity中的onCreate方法執(zhí)行完后調(diào)用易桃。
- onPause()
系統(tǒng)將此方法作為用戶離開片段的第一個信號(但并不總是意味著此片段會被銷毀)進(jìn)行調(diào)用。 您通常應(yīng)該在此方法內(nèi)確認(rèn)在當(dāng)前用戶會話結(jié)束后仍然有效的任何更改(因為用戶可能不會返回)锌俱。
onDestroyView方法:Fragment中的布局被移除時調(diào)用晤郑。
onDetach方法:Fragment和Activity解除關(guān)聯(lián)的時候調(diào)用。
運(yùn)行一下程序贸宏,可以看到打印日志如下:
這時點(diǎn)擊一下home鍵造寝,打印日志如下:
如果你再重新進(jìn)入進(jìn)入程序,打印日志如下:
然后點(diǎn)擊back鍵退出程序吭练,打印日志如下:
Fragment 的創(chuàng)建
簡單的 Fragment 可以通過重寫 onCreateView() 方法來實現(xiàn)诫龙。
onCreateView(LayoutInflater inflater, ViewGroup container,BundlesavedInstanceState)
一般使用該方法返回一個 View 對象提供給 Activity ,
所以在這里加載 xml 布局文件鲫咽,參數(shù)中签赃,
container :參數(shù)是布局將插入到的父ViewGroup(來自 Activity 的布局)
savedInstanceState :在恢復(fù) Frafment 時,提供上一片段實例相關(guān)數(shù)據(jù)的 Bundle
inflater : 可以用來獲取 xml 文件的控件分尸。
View view = inflater.inflate(R.layout.activity_news_two,container,false);
ListView newslistView=(ListView) view.findViewById(R.id.show_news);
//ListView newslistView = (ListView) getActivity().findViewById(R.id.show_news);
//getActivity() 獲取的對象可以用來獲取同一個 Activity 上不同的 Fragment 的控件锦聊。
inflate 方法的三個參數(shù):
xml 文件的ID;
將作為擴(kuò)展布局父項的 ViewGroup 對象箩绍。傳遞 container對系統(tǒng)向擴(kuò)展布局的根視圖(由其所屬的父視圖指定)應(yīng)用布局參數(shù)具有重要意義孔庭;
指示是否應(yīng)該在擴(kuò)展期間將擴(kuò)展布局附加至 ViewGroup(第二個參數(shù))的布爾值。
Activity 與 Fragment
- 動態(tài)添加材蛛、刪除 Fragment
獲取 FragmentTransaction 對象
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container,fragment);//添加到的地方
//fragmentTransaction.remove(fragment);
//fragmentTransaction.replace();
//fragmentTransaction.hide();
//fragmentTransaction.show();
fragmentTransaction.commit();
- 兩者的通信
- 事務(wù)棧
調(diào)用 addToBackStack()圆到,以將事務(wù)添加到片段事務(wù)返回棧。 該返回棧由 Activity 管理卑吭,允許用戶通過按返回按鈕返回上一片段狀態(tài)
transaction.add(R.id.fragment_container,fragment);
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);//
transaction.commit();
點(diǎn)擊返回的時候构资,上面的操作會被全部撤銷。
而且這些操作還可以通過setTransition()設(shè)置過度動畫陨簇。