




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、title: Android基礎(chǔ)入門categories: Android5.1 Fragment基本概述基礎(chǔ)入門,Android基礎(chǔ)入門述5.1 Fragment基本概本節(jié)引言1.基本概念1)它是什么鬼,用?答:Fragment是Android3.0后引入的一個(gè)新的API,他出現(xiàn)的初衷是為了適應(yīng)大屏幕的平板電腦,當(dāng)然現(xiàn)在他仍然是平板APP UI設(shè)計(jì)的寵兒,而且普通開(kāi)發(fā)也會(huì)加入這個(gè) Fragment,可以把他看成一個(gè)小型的Activity,又稱Activity片段!想想,如果一個(gè)很大的界面,就一個(gè)布局,寫起界面來(lái)會(huì)有多麻煩,而且如果組件多的話是管理起來(lái)也很麻煩!而使用Fragment好的,在上
2、一章中把Android的四大組件 Activity,Service,BroadCastReceiver,ContentProvider以及他們之間的紐帶:ent,都擼了一遍,而本章節(jié)給大家?guī)?lái)的是一個(gè)Fragment(碎片)的東西,本節(jié)就來(lái)介紹這個(gè)Fragment的一些基本概念以及用法! 文檔:Fragment下圖是文檔中給出的一個(gè)Fragment分別對(duì)應(yīng)與平板間不同情況的處理圖:PS:簡(jiǎn)單的瀏覽頁(yè)面,使用兩個(gè)Fragment分別顯示列表與內(nèi)容;2)Fragment的生命周期圖可以把屏幕劃分成幾塊,然后進(jìn)行分組,進(jìn)行一個(gè)模塊化的管理!從而可以更加方便的在運(yùn)行過(guò)程中動(dòng)態(tài)地更新Activity的用
3、戶界面!另外Fragment并不能單獨(dú)使用,他需要嵌套在Activity中使用,盡管他擁有自己的生命周期,但是還是會(huì)受到宿主Activity的生命周期的影響,比如Activity被destory銷毀了,他也會(huì)跟著銷毀!3)要點(diǎn):下面說(shuō)下使用Fragment的一些要點(diǎn):4)Fragment的幾個(gè)子類:ps:很多時(shí)候要的時(shí)候在深入研究!都是直接重寫Fragment,inflate加載布局完成相應(yīng)業(yè)務(wù)了,子類用的不多,等需框:DialogFragment列表:ListFragment選項(xiàng)設(shè)置:PreferenceFragment3.0版本后引入,即minSdk要大于11Fragment需要嵌套在Ac
4、tivity中使用,當(dāng)然也可以嵌套到另外一個(gè)Fragment中,但這個(gè)被嵌套的Fragment也是需要嵌套在Activity中的,間接地說(shuō),Fragment還是需要嵌套在 Activity中!受寄主Activity的生命周期影響,當(dāng)然他也有自己的生命周期!另外不建議在Fragment里面嵌套Fragment因?yàn)榍短自诶锩娴腇ragment生命周期不可控!文檔說(shuō)創(chuàng)建Fragment時(shí)至少需要實(shí)現(xiàn)三個(gè)方法:onCreate( ),onCreateView(),OnPause( );不過(guò)貌似只寫一個(gè)onCreateView也是可以的. Fragment的生命周期和Activity有點(diǎn)類似:三種狀態(tài):
5、Resumed:在允許中的Fragment可見(jiàn) Paused:所在Activity可見(jiàn),但是得不到焦點(diǎn) Stoped:調(diào)用addToBackStack(),Fragment被添加到Bcak棧該Activity轉(zhuǎn)向,或者該Fragment被替換/刪除ps:停止?fàn)顟B(tài)的fragment仍然活著(所有狀態(tài)和成員信息被系統(tǒng)保持著),然而,它對(duì)用戶不再可見(jiàn),并且如果activity掉,他也會(huì)掉.5)是用App包下的Fragment還是v4包下的:?jiǎn)栴}概述:相信很多朋友在使用Fragment的時(shí)候都會(huì)遇到下面這種情況:那么到底是使用android.app下的Fragment還是用的android.suppo
6、rt.v4.app包下的Fragment呢?使用v4包下Fragment要注意的地方:如果你使用了v4包下的Fragment,那么所在的那個(gè)Activity就要繼承答:其實(shí)都可以,前面 Fragment是Android 3.0(API 11)后引入的,那么如果開(kāi)發(fā)的app需要在3.0以下的版本運(yùn)行呢?比如還有一點(diǎn)點(diǎn)市場(chǎng)份額的2.3!于是乎,v4包就這樣應(yīng)運(yùn)而生了,而最低可以兼容到1.6版本!至于使用哪個(gè)包看你的需求了,現(xiàn)在3.0下 市場(chǎng)份額其實(shí)已經(jīng)不多了,隨街都是4.0以上的,6.0十月份都出了,你說(shuō)呢.所以這個(gè)時(shí)候,你可以直接使用app包下的Fragment然后調(diào)用相關(guān)的方法,通常都是不會(huì)問(wèn)
7、題的;如果你Fragment用了app包的, FragmentManager和FragmentTranion都需要是app包的!要么用全部用app,要么全部用v4,不然會(huì)報(bào)錯(cuò)的哦!當(dāng)然如果你要自己的app對(duì)于低版本機(jī)也兼容的話,那么就可以選擇用v4包!WebView界面:WebViewFragment2.創(chuàng)建一個(gè)Fragment1)靜態(tài)加載Fragment實(shí)現(xiàn)流程:FragmentActivity哦!案例:今天在xml文件中靜態(tài)地載入fragment,然后重寫了Fragment,但是在加載 Activity的時(shí)候就報(bào)錯(cuò)了,大概的提示就是Fragment錯(cuò)誤還是找不到什么的,name屬性改了幾次
8、還是錯(cuò)!最后才發(fā)現(xiàn)是用了v4的包的緣故,只需讓自己的Activity改成FragmentActivity即可!之前寫了下面這段代碼,然后報(bào)錯(cuò):有點(diǎn)莫名其妙啊,Fragment,FragmentManager,FragmentTranion都是用的v4包啊,Activity也是繼承FragmentActivity的啊?都改成app包就可以了,但是這不和用 v4包的前提了么?其實(shí)也是有解決方法的哈?答:只需要把getFragmentManager( )改成getSupportFragmentManager( )就可以了示例代碼:Step 1:定義Fragment的布局,就是fragment顯示內(nèi)容
9、的Step 2:自定義一個(gè)Fragment類,需要繼承Fragment或者他的子類,重寫onCreateView()方法在該方法中調(diào)用:inflater.inflate()方法加載Fragment的布局文件,接著返回加載的view對(duì)象public class ragmentone extendsOverrideragment .public View onCreateView(Layout nflater inflater, ViewGroupcontainer,.Bundle saved nstane) View view = inflater.inflate(R.layout.fragme
10、nt , container,false);.return view;Step 3:在需要加載Fragment的Activity對(duì)應(yīng)的布局文件中添加fragment的記住,name屬性是全限定類名哦,就是要包含F(xiàn)ragment的包名,如:,Step 4: Activity在onCreate( )方法中調(diào)用setContentView()加載布局文件即可!2)動(dòng)態(tài)加載Fragment實(shí)現(xiàn)流程:示例代碼:這里演示的是,當(dāng)橫豎屏切換的時(shí)候地切換Fragment:Fragment以及布局代碼就不貼出來(lái)了,直接貼MainActivity的關(guān)鍵代碼:public class MainActivity ex
11、tendivity .Overrideprotected void onCreate(Bundle super.onCreate(saved nstansaved nstane);e) setContentView(R.layout.activity_main); Display dis = getWindowManager().getDefau if(dis.getWidth() dis.getHeight()isplay();ragmentf= new ragment ();get ragmentManager().beg, f ).commit();ranion().replace(R.
12、id.LinearLayout.elseragment2 f2 = new ragment2();get ragmentManager().beg, f2).commit();ranion().replace(R.id.LinearLayout.0.3.Fragment管理與Fragment事務(wù)4.Fragment與Activity的交互可能有的朋友不喜歡看圖,接下來(lái)用文字介紹下吧:1)組件獲取Fragment獲得Activity中的組件: getActivity().findViewById(R.id.list);Activity獲得Fragment中的組件(根據(jù)id和tag都可以):get
13、FragmentManager.findFragmentByid(R.id.fragment1);2)數(shù)據(jù)傳遞Activit傳遞數(shù)據(jù)給Fragment:Fragment傳遞數(shù)據(jù)給ActivityStep 1:定義一個(gè)回調(diào)接口:(Fragment中)/*接口*/public.erface CallBack/*定義一個(gè)獲取信息的方法*/ public void getResult(Stringresult);Step 2:接口回調(diào)(Fragment中)/*接口回調(diào)*/public void getD.allBack callBack)/*獲取文本框的信息,當(dāng)然你也可以傳其他類型的參數(shù),看需求咯*/
14、 String msg = editText.getText().toString();在Fragment中定義一個(gè)回調(diào)接口,再讓包含該Fragment的Activity實(shí)現(xiàn)該回調(diào)接口,Fragment就可以通過(guò)回調(diào)接口傳數(shù)據(jù)了,回調(diào),相信很多人都知道是什么玩意,但是寫不出來(lái)啊,網(wǎng)上的一fragment傳數(shù)據(jù)給Activity,全是老師的那個(gè)代碼,真心無(wú)語(yǔ)算了,這里就寫下局部代碼吧,相信讀者一看就懂的了:在Activity中創(chuàng)建Bundle數(shù)據(jù)包,調(diào)用Fragment實(shí)例的setArguments(bundle)從而將Bundle數(shù)據(jù)包傳給Fragment,然后Fragment中調(diào)用getAr
15、guments獲得 Bundle對(duì)象,然后進(jìn)行 就可以了.callBack.getResult(msg);Step 3:使用接口回調(diào)方法讀數(shù)據(jù)(Activity中)/* 使用接口回調(diào)的方法獲取數(shù)據(jù) */left ragment.getData(new CallBack() Overridepublic void getResult(String result) Toast.makeText(MainActivity.this, ););./*打印信息*/ result, ).show(.總結(jié)下方法:-在Fragment定義一個(gè)接口,接口中定義抽象方法,你要傳什么類型的數(shù)據(jù)參數(shù)就設(shè)置為什么類型;
16、-接著還有寫一個(gè)調(diào)用接口中的抽象方法,把要傳遞的數(shù)據(jù)傳過(guò)去-再接著就是Activity了,調(diào)用Fragment提供的那個(gè)方法,然后重寫抽象方法的時(shí)候進(jìn)行數(shù)據(jù)的就可以了!Fragment與Fragment之間的數(shù)據(jù)互傳示例代碼如下:ragmentManagerragmentTran ragmentthree tfManager = getSupport ragmentManager( );.ion fTranion = fManager.begranion();= new ragmentthree();其實(shí)這很簡(jiǎn)單,找到要接受數(shù)據(jù)的fragment對(duì)象,直接調(diào)用setArguments傳數(shù)據(jù)進(jìn)去
17、就可以了通常的話是replace時(shí),即fragment跳轉(zhuǎn)的時(shí)候傳數(shù)據(jù)的,那么只需要在初始化要跳轉(zhuǎn)的 Fragment后調(diào)用他的setArguments方法傳入數(shù)據(jù)即可!如果是兩個(gè)Fragment需要即時(shí)傳數(shù)據(jù),而非跳轉(zhuǎn)的話,就需要先在Activity獲得f1傳過(guò)來(lái)的數(shù)據(jù),再傳到f2了,就是以Activity為媒介.ragmenttwo t2 = new ragmenttwo();Bundundle = new Bundle();bundle.putString(key,id);t2.setArguments(bundle);fTranfTranion.add(R.id.fragmentRoo
18、t, t2, ); ion.addToBackStack(t );mit();5.走一次生命周期圖:思前想后還是決定要帶大家簡(jiǎn)單的走一趟生命周期圖,加深大家對(duì)Fragment生命周期的理解:Activity加載Fragment的時(shí)候,依次調(diào)用下面的方法:onAttach - onCreate - onCreateView - onActivityCreated - onStart -onResume當(dāng)弄出一個(gè)懸浮的框風(fēng)格的Activity,或者其他,就是讓Fragment所在的 Activity可見(jiàn),但不獲得焦點(diǎn)onPause當(dāng)框關(guān)閉,Activity又獲得了焦點(diǎn):onResume當(dāng)替換Fragment,并調(diào)用addToBackStack()將他添加到Back棧中onPause - onStop - onDestoryView!注意,此時(shí)的Fragment還沒(méi)有被銷毀哦!當(dāng)按下鍵盤的回退鍵,F(xiàn)ragment會(huì)再次顯示出來(lái):onCreateView - onActivityCreated - onStart - onResume如果替換后,在事務(wù)commit之
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位采購(gòu)供貨合同范例
- 單包木工合同范本
- 加盟產(chǎn)生費(fèi)用合同范本
- 物探工題庫(kù)(含參考答案)
- 汽車電工電子應(yīng)用試題
- 個(gè)人工作任務(wù)總結(jié)
- 廚具清洗維修合同范例
- 充電樁物業(yè)合同范本
- 機(jī)械制造技術(shù)考試模擬題(含答案)
- 一年級(jí)語(yǔ)文畫教案
- 高警示藥物處方審核要點(diǎn)
- 2022年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院?jiǎn)握姓Z(yǔ)文模擬試題及答案
- TSG11-2020 鍋爐安全技術(shù)規(guī)程
- 員工晨會(huì)記錄表
- 《兒科學(xué)》教案緒論、生長(zhǎng)發(fā)育(可編輯)
- 第二章政府審計(jì)組織與審計(jì)法律規(guī)范
- 楚才辦公室裝修設(shè)計(jì)方案20140315
- 人教版八年級(jí)(上冊(cè))物理習(xí)題全集(附答案)
- 電影院影務(wù)崗位工作流程
- 衛(wèi)生責(zé)任區(qū)域劃分表
- 《感染性腹瀉》PPT課件.ppt
評(píng)論
0/150
提交評(píng)論