以下內(nèi)容整理自互聯(lián)網(wǎng),僅用于個(gè)人學(xué)習(xí)
- 完整生存期:onCreate()方法和onDestroy()方法之間喇辽。
- 可見生存期:onStart()方法和onStop()方法之間。
- 前臺(tái)生存期:onResume()方法和onPause()方法之間丛楚。
Activity
Fragment
1. 為什么需要Fragment
為了更好的利用大屏幕的空間箩绍,同時(shí)適配手機(jī)和平板、UI和邏輯的共享梳侨,在平板中廣泛使用蛉威。
2. Fragment生命周期
3. Fragment比Activity多了幾個(gè)額外的生命周期回調(diào)方法:
- onAttach(Activity):當(dāng)Fragment和Activity發(fā)生關(guān)聯(lián)時(shí)使用
- onCreateView(LayoutInflater, ViewGroup, Bundle):創(chuàng)建該Fragment的視圖
- onActivityCreate(Bundle):當(dāng)Activity的onCreate方法返回時(shí)調(diào)用
- onDestoryView():與onCreateView相對(duì)應(yīng),當(dāng)該Fragment的視圖被移除時(shí)調(diào)用
- onDetach():與onAttach相對(duì)應(yīng)走哺,當(dāng)Fragment與Activity關(guān)聯(lián)被取消時(shí)調(diào)用
4. 動(dòng)態(tài)添加fragment的步驟
- 創(chuàng)建待添加的fragment實(shí)例蚯嫌。
- 獲取FragmentManager,在activity中可以直接調(diào)用getFragmentManager()方法得到丙躏。
- 通過beginTransaction()方法開啟一個(gè)事務(wù)择示。
- 向容器中添加fragment,一般使用replace()方法實(shí)現(xiàn)晒旅。
- 調(diào)用commit()方法提交事務(wù)栅盲。
AnotherFragment fragment = new AnotherFragment();
FragmentManager fm = getFragmentManager();
fm.beginTransaction()
.replace(R.id.fragmentContainer, fragment)
.commit();
5. Fragment與Activity之間的交互
Fragment與Activity之間的交互可以通過Fragment.setArguments(Bundle args)以及Fragment.getArguments()來實(shí)現(xiàn)。
6. Fragment狀態(tài)的持久化
- 可以通過protected void onSaveInstanceState(Bundle outState)
,protected void onRestoreInstanceState(Bundle savedInstanceState)
狀態(tài)保存和恢復(fù)的方法將狀態(tài)持久化废恋。 - 讓Android自動(dòng)幫我們保存
- FragmentManager.putFragment(Bundle bundle, String key, Fragment fragment)是在Activity中保存Fragment的方法谈秫。
- FragmentManager.getFragment(Bundle bundle, String key)是在Activity中獲取所保存的Frament的方法。
很顯然鱼鼓,key就傳入Fragment的id拟烫,fragment就是你要保存狀態(tài)的fragment,但迄本,我們注意到上面的兩個(gè)方法硕淑,第一個(gè)參數(shù)都是Bundle,這就意味著FragmentManager是通過Bundle去保存Fragment的岸梨。但是喜颁,這個(gè)方法僅僅能夠保存Fragment中的控件狀態(tài),比如說EditText中用戶已經(jīng)輸入的文字(注意曹阔!在這里半开,控件需要設(shè)置一個(gè)id,否則Android將不會(huì)為我們保存控件的狀態(tài))赃份,而Fragment中需要持久化的變量依然會(huì)丟失寂拆,但依然有解決辦法奢米,就是利用方法一!