版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
目錄10.1Fragment在項目中的使用10.2控件交互在項目中的使用10.3RecyclerView在項目中的使用
十、
習(xí)慣記錄系統(tǒng)十、習(xí)慣記錄系統(tǒng)Fragment是Android3.0引入的新API,它代表了Activity的子模塊,它必須被“嵌入”Activity中使用,因此雖然Fragment擁有自己的生命周期,但Fragment的生命周期會受到它所在的Activity的生命周期控制。10.1Fragment在項目中的使用10.1.1Fragment介紹十、習(xí)慣記錄系統(tǒng)Fragment的特征:
作為Activity界面的組成部分。Fragment可調(diào)用getActivity()方法獲取它所在的Activity,Activity可調(diào)用FragmentManager的findFragmentById()或findFragmentByTag()方法來獲取Fragment。
在Activity運行過程中,可調(diào)用FragmentManager的add()、remove()、replace()方法動態(tài)地添加、刪除或替換Fragment。
一個Activity可以同時組合多個Fragment;反過來,一個Fragment也可以被多個Activity復(fù)用。十、習(xí)慣記錄系統(tǒng)Fragment存在四種生命周期狀態(tài):
活動狀態(tài):當(dāng)前Fragment位于前臺,用戶可見,可以獲得焦點。
暫停狀態(tài):其他Activity位于前臺,該Fragment依然可見,只是不能獲得焦點。
停止?fàn)顟B(tài):該Fragment不可見,失去焦點。
銷毀狀態(tài):該Fragment被完全刪除,或該Fragment所在的Activity被結(jié)束。10.1.2Fragment的生命周期十、習(xí)慣記錄系統(tǒng)右圖顯示了Fragment生命周期及相關(guān)回調(diào)方法。從圖可以看出,在Fragment生命周期中,一些方法會被回調(diào)。
開發(fā)Activity時可以根據(jù)需要選擇性地覆蓋指定方法,開發(fā)Fragment時也可根據(jù)需要選擇性地覆蓋指定方法,其中最常見的就是覆蓋onCreateView()方法,該方法返回的View將由Fragment顯示出來。圖10.1十、習(xí)慣記錄系統(tǒng)APP中需要一個Activity來管理一個CrimeFragment,用來顯示習(xí)慣列表。這個Activity名為CrimeActivity,同時創(chuàng)建一個習(xí)慣類,用于表示每個習(xí)慣,習(xí)慣流程圖如圖。10.1.3習(xí)慣記錄系統(tǒng)創(chuàng)建圖10.2十、習(xí)慣記錄系統(tǒng)
在圖10.3中將展示該APP的對象圖標(biāo),以及第一個版本所需要用到的相關(guān)類。有三個類展示出來,將完成:Crime、CrimeFragment、CrimeActivity。(1)一個Crime對象將表示一個辦公室習(xí)慣。在這一節(jié)中,一個習(xí)慣僅僅包含一個標(biāo)題和一個id。標(biāo)題是習(xí)慣的描述性內(nèi)容。id標(biāo)記一個獨特的Crime實例。(2)CrimeFragment:有一個成員變量(mCrime);界面由一個LinearLayout和一個EditText組成;CrimeFragment包含一個EditExt的成員變量(mTitleField),同時為它設(shè)置了監(jiān)聽器由于監(jiān)聽內(nèi)容的改變。(3)CrimeActivity的界面由FrameLayout組成,在FrameLayout區(qū)域顯示Fragment的內(nèi)容。十、習(xí)慣記錄系統(tǒng)圖10.3十、習(xí)慣記錄系統(tǒng)
創(chuàng)建一個新的Android項目,項目名字為CriminalIntent,包名為com.alex.criminalIntent,最低版本選擇API14,編譯版本默認選擇最高編譯版本:圖10.4十、習(xí)慣記錄系統(tǒng)
點擊Next,創(chuàng)建CrimeActivity,最后點擊完成:圖10.5十、習(xí)慣記錄系統(tǒng)
在支持包中有兩個非常重要的類:Fragment和FragmentActivity。使用Fragment時需要Activity知道如何管理Fragment,而FragmentActivity就是用于管理支持包中的Fragment的。
由于項目創(chuàng)建時會自動包含V4支持包,因此可以直接使用支持包中的Fragment。
在項目packageexplorer視圖中,打開CrimeActivity.java,改變CrimeActivity的繼承類為FragmentActivity。代碼如下:10.1.4Fragment與支持包十、習(xí)慣記錄系統(tǒng)
現(xiàn)在創(chuàng)建Model層的實體類Crime,選擇包名,單擊右鍵創(chuàng)建類Crime。
在Crime.java中,添加如下代碼:十、習(xí)慣記錄系統(tǒng)十、習(xí)慣記錄系統(tǒng)
1.代管Fragment
使用Activity管理一個UIFragment時需要注意以下兩點:(1)在Activity布局文件中給Fragment指定一個區(qū)域顯示。(2)管理Fragment實例的生命周期。2.兩種方式代管Fragment(1)在Activity的布局文件中增加Fragment。(2)在Activity的代碼中添加Fragment。10.1.5Fragment的應(yīng)用十、習(xí)慣記錄系統(tǒng)3.定義一個containerView
首先在Activity的代碼中添加一個Fragment,但是在這之前必須在Activity的View層級樹中為Fragment指定一塊顯示區(qū)域。CrimeActivity的布局文件如下所示:
至此,我們可以通過代碼把Fragment插入到這個FrameLayout中,但在此之前,需要創(chuàng)建一個Fragment。十、習(xí)慣記錄系統(tǒng)4.創(chuàng)建Fragment創(chuàng)建Fragment的步驟與創(chuàng)建Activity的步驟:(1)通過布局文件創(chuàng)建用戶界面。(2)創(chuàng)建一個類,同時將布局文件綁定為它的View。(3)在代碼中獲得布局文件中的控件進行操作。十、習(xí)慣記錄系統(tǒng)5.定義CrimeFragment的布局Crime實例的消息將通過CrimeFragment展示出來,包括文字、圖片等等。在Fragment的布局文件中,只需要一個EditText控件。EditText是一個用戶可以增加和編輯文本的控件。Fragment_xml布局文件代碼如下:十、習(xí)慣記錄系統(tǒng)十、習(xí)慣記錄系統(tǒng)6.創(chuàng)建CrimeFragment
在項目中創(chuàng)建CrimeFragment,使之繼承Fragment類,需要注意的是,F(xiàn)ragment有兩個不同包名的Fragment類,一個為Fragment(android.app),一個為Fragment。前者是一個由Android自帶的Fragment,需要的是支持包版本的Fragment,所以選擇android.support.v4.app版本的Fragment:十、習(xí)慣記錄系統(tǒng)7.實現(xiàn)Fragment生命周期方法CrimeFragment是模型與視圖交互的控制器。該類的主要工作是顯示習(xí)慣詳情以及更新。這些控制內(nèi)容主要在生命周期方法中實現(xiàn),這些生命周期方法與Activity類似,比如OnCreate(Bundle)方法。
在CrimeFragment.java中增加Crime成員對象和一個繼承的onCreate()方法,代碼如下所示:十、習(xí)慣記錄系統(tǒng)(1)Fragment的onCreate(Bundle)方法是public修飾的方法,而Activity的onCreate(Bundle)方法是protected修飾,這是因為Fragment的生命周期方法會被代管的Activity所調(diào)用。(2)?Fragment與Activity一樣也可以通過Bundle對象保存獲取狀態(tài)。
在CrimeFragment.java中增加繼承生命周期方法onCreateView()來加載布局文件。代碼如下:十、習(xí)慣記錄系統(tǒng)十、習(xí)慣記錄系統(tǒng)FragmentManager可以處理兩個事情:Fragment集合和Fragment事務(wù)的回退棧。在本案例中,只需要關(guān)注Fragment集合。在CrimeActivity.java中增加以下代碼:十、習(xí)慣記錄系統(tǒng)8.FragmentTransactions
通過FragmentManager可以將Fragment添加進去并管理此Fragment。十、習(xí)慣記錄系統(tǒng)
在上述代碼中,fm.beginTransaction()方法創(chuàng)建并且返回一個FragmentTransaction實例,該實例在配置FragmentTransaction時使用流接口返回FragmentTransaction而不是返回void,這樣在配置FragmentTransaction時可以連著一起寫然后再提交。Add()方法是FragmentTransaction事務(wù)管理方法之一。它有兩個參數(shù):容器id和需要管理的Fragment。在本案例中是R.id.fragment_container以及CrimeFragment。
帶有id的容器空間主要有兩個目的:(1)通知FragmentManager代管的Fragment出現(xiàn)在Activity界面的哪個區(qū)域。(2)在FragmentManager的集合中作為Fragment的獨一無二的標(biāo)識符用于區(qū)分。
當(dāng)需要從FragmentManager中得到CrimeFragment時,可以通過容器id得到。十、習(xí)慣記錄系統(tǒng)
通過FragmentManager的findFragmentById()方法得到Fragment。如果在FragmentManager中沒有Fragment,則創(chuàng)建一個新的;有則直接返回該對象。十、習(xí)慣記錄系統(tǒng)運行程序:圖10.6十、習(xí)慣記錄系統(tǒng)
在Eclipse中打開Crime.java類,增加兩個屬性mDate和mSolved,mDate表示習(xí)慣發(fā)生的時間,而mSolved表示習(xí)慣是否已經(jīng)解決。在Crime.java中增加代碼如下所示:10.2控件交互在項目中的使用10.2.1更新Crime十、習(xí)慣記錄系統(tǒng)
在Eclipse中Date類自動導(dǎo)包時注意需要導(dǎo)入java.util.Date,否則將會報錯。在Crime的構(gòu)造方法中得到mDate對象,接下來對mDate、mSolve進行封裝,添加get、set方法。在Crime中增加代碼如下所示:十、習(xí)慣記錄系統(tǒng)
更新布局文件的代碼:10.2.2更新Crime十、習(xí)慣記錄系統(tǒng)十、習(xí)慣記錄系統(tǒng)
上面的Button沒有給該控件初始化文字。這個按鈕的功能是展示習(xí)慣發(fā)生日期,將在代碼中初始化文字。
在上述代碼中又用到一些字符串資源,字符串代碼修改如下:十、習(xí)慣記錄系統(tǒng)
在CrimeFragment.java中更新代碼,對布局代碼更新的控件進行連接,增加兩個成員變量代碼如下:10.2.3連接控件十、習(xí)慣記錄系統(tǒng)
在onCreateView()方法中得到布局文件的button實例,再讓button按鈕顯示日期。在onCreateView方法中增加了對CheckBox的事件監(jiān)聽以及相應(yīng)的處理。自此,布局文件的更新已經(jīng)完成。十、習(xí)慣記錄系統(tǒng)
在本節(jié)中,我們將更新習(xí)慣記錄列表。這個列表將展示每一個習(xí)慣的標(biāo)題、時間以及是否已經(jīng)解決。展示習(xí)慣列表需要在應(yīng)用的控制層(Controller)更新Activity和Fragment,在模型層(Model)也增加新的實體類CrimeLab,在此實體類中將保存Crime對象集合。在View層,將使用一個新的控件RecyclerView,通過此控件展示習(xí)慣列表,如圖10.7所示。10.3RecyclerView在項目中的使用十、習(xí)慣記錄系統(tǒng)圖10.7十、習(xí)慣記錄系統(tǒng)
更新該應(yīng)用的Model層就是將單個Crime對象更新為Crime對象列表。在這里將通過單例來存儲Crime列表。單例類是指該類只能被創(chuàng)建一次。
當(dāng)需要創(chuàng)建單例時,該類的構(gòu)造方法必須為私有的,同時提供靜態(tài)的get()方法。如果實例已經(jīng)存在,通過get()方法得到該對象;如果實例不存在,get()方法將調(diào)用構(gòu)造器創(chuàng)建一個實例。代碼如下:10.3.1更新應(yīng)用Model層十、習(xí)慣記錄系統(tǒng)
在CrimeLab類中,定義了一個靜態(tài)的成員變量sCrimeLab,同時構(gòu)造方法也適用,當(dāng)其他類需要CrimeLab時,只需要調(diào)用靜態(tài)方法get()就可以得到實例對象。十、習(xí)慣記錄系統(tǒng)
給CrimeLab添加一些Crime對象用于存儲。在CrimeLab的構(gòu)造方法中,創(chuàng)建一個空的Crimes集合,同時增加兩個方法:getCrimes()和getCrime(UUID),前者返回一個Crime集合,后者返回一個Crime對象:十、習(xí)慣記錄系統(tǒng)
給mCrimes的集合增加數(shù)據(jù),在構(gòu)造方法中增加代碼:十、習(xí)慣記錄系統(tǒng)1.使用一個抽象Activity代管Fragment
創(chuàng)建CrimeListActivity類來代管CrimeListFragment。第一步需要為CrimeListActivity創(chuàng)建界面布局。在前面的CrimeActivity中,我們使用activity_crime.xml作為布局文件,這個布局文件將FrameLayout作為容器。但是activity_crime.xml僅僅提供了一個容器,沒有其他控件,可以將它作為一個通用的Fragment的布局文件,將此文件重命名為activity_fragment.xml。這樣當(dāng)Activity僅作為Fragment的代管者時,都可以使用該布局文件。記得在之前的CrimeActivity.java的onCreate()方法中修改setContentView()參數(shù)。十、習(xí)慣記錄系統(tǒng)
在創(chuàng)建CrimeListActivity時,可以重用前面CrimeActivity的代碼。在CrimeActivity的代碼中,當(dāng)需要代管一個Fragment時,唯一不同的是Fragement對象的不同。為了避免代碼重復(fù),可以定義一個抽象類。
在應(yīng)用中創(chuàng)建一個抽象類SingleFragmentActivity,同時繼承FragmentActivity。通過一個抽象方法得到Fragment對象,這樣其子類只需要實現(xiàn)該抽象方法就能得到Fragment對象。十、習(xí)慣記錄系統(tǒng)十、習(xí)慣記錄系統(tǒng)3.使用抽象類
改變前面所寫的CrimeActivity類,將CrimeActivity的父類改變?yōu)镾ingleFragment-Activity,刪除其實現(xiàn)的onCreate()方法,同時實現(xiàn)父類的SingleFragmentActivity的createFragment()方法:十、習(xí)慣記錄系統(tǒng)4.創(chuàng)建新的控制器
創(chuàng)建新的控制器類CrimeListActivity和CrimeListFragment,并實現(xiàn)其父類的方法。
CrimeListFragment繼承了支持包的Fragment,暫時無方法。代碼如下:十、習(xí)慣記錄系統(tǒng)5.注冊CrimeListActivityCrimeListActivity通過代碼繼承SingleFragmentActivity之后,需要在清單文件中注冊該Activity,將CrimeListActivity作為其登錄界面,只需要在其注冊文件中增加上述代碼中的<intent-filter>即可。十、習(xí)慣記錄系統(tǒng)RecyclerView的功能是回收TextView以及將它們部署到屏幕上。此處需要用到兩個類:一個Adapter的子類以及一個ViewHolder的子類。相比而言,ViewHolder的工作量更小,所以先講述ViewHolder的功能。ViewHolder做的主要事情如圖所示。在ListView中,在其適配器的getView方法中,ListView需要展示多少個item就需要創(chuàng)建多少個item的View對象;而在RecyclerView中,RecyclerView并不直接創(chuàng)建View對象,而是通過創(chuàng)建RecyclerView對象,通過RecyclerView對象對View的引用來減少內(nèi)存中對象個數(shù)以及訪問布局文件的次數(shù)。10.3.2RecyclerView、Adapter和ViewHolder圖10.81.ViewHolderAndroidAdapter十、習(xí)慣記錄系統(tǒng)2.AdapterAdapter是一個控制器類,它是RecyclerView和數(shù)據(jù)之間的橋梁,通過Adapter將數(shù)據(jù)顯示到RecyclerView界面中。RecyclerView的適配器主要負責(zé):
創(chuàng)建需要的ViewHolder。
將model的數(shù)據(jù)綁定到ViewHolder中。
創(chuàng)建RecyclerView的適配器需要繼承RecyclerView.Adapter,通過此適配器將把CrimeLab中的Crime集合顯示到RecyclerView上。
當(dāng)RecyclerView需要展示一個View對象時,它將與Adapter聯(lián)系。圖10.9列出了RecyclerView與Adpter的聯(lián)系調(diào)用關(guān)系。十、習(xí)慣記錄系統(tǒng)
首先,RecyclerView調(diào)用Adapter的getItemCount()方法來知曉有多少個item。
接下來,RecyclerView得到item的數(shù)目后,調(diào)用Adapter的createViewHolder(ViewGroup,int)方法來創(chuàng)建新的ViewHolder。
最后,RecyclerView調(diào)用onBindViewHolder(ViewHolder,int)。圖10.9十、習(xí)慣記錄系統(tǒng)RecyclerView是Android支持庫中的一個類,故使用RecyclerView的第一步就是導(dǎo)入對應(yīng)的支持庫。在SDK的文件目錄中找到extras文件夾,找到v7包中對應(yīng)的android-support-v7-recyclerview.jar文件并將其導(dǎo)入到項目中即可。
在res/layout目錄下,創(chuàng)建fragment_crime_list布局文件,同時修改其根容器為RecyclerView:10.3.3使用RecyclerView十、習(xí)慣記錄系統(tǒng)
同時在CrimeListFragment中做修改:十、習(xí)慣記錄系統(tǒng)1.實現(xiàn)Adapter和ViewHolder
在CrimeListFragment中定義一個集成ViewHolder的內(nèi)部類:十、習(xí)慣記錄系統(tǒng)
在CrimeListFragment內(nèi)創(chuàng)建RecyclerView.Adapter的繼承類CrimeAdapter:十、習(xí)慣記錄系統(tǒng)Adapter創(chuàng)建完成之后,只需要將該Adapter傳遞給RecylerView即可。在CrimeListFragment中增加updateUI()方法,并添加到onCrea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 對數(shù)函數(shù)及性質(zhì)課件
- 2024年版道路橋梁建設(shè)項目招標(biāo)合同版B版
- 2024年智能交通管理系統(tǒng)開發(fā)與應(yīng)用協(xié)議
- 2024年土地置換與鄉(xiāng)村旅游資源開發(fā)合同3篇
- 五年級上冊第五單元綜合性學(xué)習(xí)課件
- 2025年柳州貨運從業(yè)資格證怎么考試
- 2025年廣州貨運從業(yè)資格證模擬考試試題
- 2025年鶴崗貨運從業(yè)資格證模擬考
- 2025年陜西從業(yè)資格貨運資格考試題庫及答案
- 2025年南寧年貨運資格證考試題
- 汝城縣資源型城市可持續(xù)發(fā)展研究報告樣本
- 2023年12月燕山大學(xué)公開招聘35名工作人員筆試歷年高頻考題(難、易錯點薈萃)答案帶詳解附后
- 三年級上冊3.8《安全記心上》課件(共18張PPT)
- 甘肅甕福公司招聘考試題
- UPS維保方案 文檔
- 產(chǎn)婦乏力的護理
- 項目管理提升總結(jié)匯報
- 職業(yè)生涯規(guī)劃公務(wù)員
- 彈性力學(xué)-012第十二章-彈性波的傳播
- 職業(yè)規(guī)劃中職業(yè)能力
- 腎積水教學(xué)演示課件
評論
0/150
提交評論