本來是打算一周至少寫兩篇博客的但汞,但是這周無奈亂七八糟的事兒太多宿刮,今天總算是找了個時間來寫一篇博客。就記錄下平時沒怎用的Fragment的使用吧私蕾。作為一個菜鳥級的android開發(fā)僵缺,在目前做的實(shí)驗(yàn)室的項(xiàng)目都比較小,為了簡單就統(tǒng)統(tǒng)只使用Activity踩叭,F(xiàn)ragment基本上沒有用過磕潮,所以寫了這篇文章記錄下學(xué)習(xí)過程翠胰,熟悉鞏固一下它的用法。
什么是Fragment
Fragment,簡單的中文翻譯就是碎片的意思自脯,在進(jìn)一步說就是UI當(dāng)中的碎片之景。就我自己的理解其實(shí)就相對于是一個小型的Activity,因?yàn)樵贏ctivity中能夠?qū)崿F(xiàn)的東西它也可以膏潮,但是它必須存在于一個Activity中锻狗。Fragment最開始出現(xiàn)的時候主要應(yīng)用于平板系統(tǒng)中,因?yàn)槠桨宓钠聊槐容^大焕参,如果一個界面都用activity加載的一個布局去展示的話轻纪,一方面是會不好看,浪費(fèi)空間叠纷,另一方面也不方便管理維護(hù)刻帚。所以將界面分成幾個小的部分,而每個部分就是一個fragment涩嚣,因此在我看來fragment就是一個小型的activity我擂。
既然Fragment是一個小型的Activity,那他應(yīng)該也有生命周期了缓艳,也存在一個create到resume到destroy的過程校摩,關(guān)于它的生命周期以及與Activity生命周期的關(guān)系,在這里先就不說了阶淘,網(wǎng)上的資料一大堆衙吩,以后有時間的話也會來補(bǔ)充上
Fragment的使用
fragment的使用主要分為兩個部分,第一個如何去創(chuàng)建一個fragment溪窒,第二個如何把fragment放在activity中
1.如何創(chuàng)建一個fragment
上面說了fragment就是一個小的activity坤塞,所以它的創(chuàng)建過程其實(shí)和activity相似,首先新建一個布局文件澈蚌,假設(shè)創(chuàng)建了一個fragment_layout.xml文件摹芙,然后新建一個MyFragment類文件,讓該類繼承Fragment類(一般選擇support-v4包中的Fragment宛瞄,因?yàn)榧嫒菪詮?qiáng)),接下來就可以像activity去加載布局xml文件一下重寫onCreateView方法去加載布局浮禾,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_layout,container,false);
return view;
}
到這一步就成功創(chuàng)建了一個自定義的Fragment,就是這么easy
2. 如何把Fragment添加到Activity中
因?yàn)閒ragment必須存在activity中份汗,所以創(chuàng)建了一個activity中還沒辦法將它展現(xiàn)出來盈电,必須添加到相應(yīng)的activity中。而這一過程有兩種方式杯活,包括靜態(tài)添加和動態(tài)添加
靜態(tài)添加
靜態(tài)添加就是在activity對應(yīng)要加載的布局xml布局文件中通過fragment標(biāo)簽直接把fragment引入在相應(yīng)位置匆帚。如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/my_fragment"
android:name="com.example.tu.fragmenttest.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
這樣當(dāng)該布局xml對應(yīng)的activity可見的時候,MyFragment就會展示出來旁钧,所以這種方式也很easy
動態(tài)添加
所謂的動態(tài)添加就是在Activity啟動之后動態(tài)加入吸重。這種方式比起前面的靜態(tài)方式稍微復(fù)雜一點(diǎn)點(diǎn)互拾,但是這種方式更實(shí)用,因?yàn)檫@樣可以隨時控制activity的添加嚎幸,替換摩幔,刪除等動作。
動態(tài)添加方式需要首先在布局xml文件中用ViewGroup控件給fragment預(yù)留一個位置鞭铆,然后就需要借助FragmentManager來將fragment放置到該位置中,動態(tài)添加的步驟為:
- 創(chuàng)建自定義Fragment的實(shí)例焦影,即new一個自定義的Fragment车遂;
- 獲取FragmentManager的實(shí)例,一般可直接通過getFragmentManager獲取到斯辰,若是使用的support-v4包下的Fragment舶担,則需要通過getSupportFragmentManager獲取彬呻;
- 通過FragmentManager實(shí)例的beginTransaction方法開啟得到FragmentTranscation的實(shí)例衣陶,即開啟一個事務(wù)(注意FragmentTranscation的實(shí)例只能使用一次,后續(xù)有需要動態(tài)操作fragment的時候則需要重新開啟一個新的實(shí)例)闸氮;
- 事務(wù)提供了add方法剪况,可將fragment添加進(jìn)來,add方法接收兩個參數(shù)蒲跨,第一個參數(shù)是需要放置的布局id译断,第二個參數(shù)則是上面new出來的fragment實(shí)例。類似的事務(wù)還提供了replace或悲,remove等方法都是用來動態(tài)操作fragment的孙咪;
- 上面的事務(wù)將所要完成的工作都準(zhǔn)備好了,最后的工作就是將這個事務(wù)提交即調(diào)用commit()方法巡语,以實(shí)現(xiàn)效果翎蹈。
Example
MyFragment myFragment = new MyFragment();
FragmentManager mfragmentManger = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = mfragmentManger.beginTransaction();
fragmentTransaction.add(R.id.fragment_frame,myFragment);
fragmentTransaction.commit();
總結(jié)
本文目前只是對Fragment最基本的使用方法做了一個簡單的介紹,后面還會針對fragment的使用細(xì)節(jié)等進(jìn)行補(bǔ)充男公,也會記錄一些Fragment的應(yīng)用荤堪,比如類似微信app底部的導(dǎo)航欄。
菜鳥一枚枢赔,寫的不好逞力,還在努力進(jìn)步中,如果有任何建議歡迎提出
2017 4.1 23:58
806實(shí)驗(yàn)室