Fragment生命週期筆記

一個暱稱而已T發表於2017-09-17

這裡寫圖片描述

這裡寫圖片描述

Activity A為承載Fragment的活動

當直接在一個Activity中直接通過</fragment> 標籤新增Fragment時:
這裡寫圖片描述

將含有Fragment的Activity推出棧時:
這裡寫圖片描述

這裡寫圖片描述


這裡寫圖片描述


也可以通過(Support)FragmentManager直接在Activity中新增Fragment,此時與直接使用</fragment> 的會有些許不同,(注意測試程式碼的順序,日誌是在事務提交後才列印的)
這裡寫圖片描述

將含有Fragment的Activity推出棧時:

這裡寫圖片描述


另外,還附上鴻神的相關部落格:
Android Fragment 真正的完全解析(上)
Fragment家族常用的API
Fragment常用的三個類:
android.app.Fragment 主要用於定義Fragment
android.app.FragmentManager 主要用於在Activity中操作Fragment
android.app.FragmentTransaction 保證一些列Fragment操作的原子性,熟悉事務這個詞,一定能明白~
a、獲取FragmentManage的方式:
getFragmentManager() // v4中,getSupportFragmentManager
b、主要的操作都是FragmentTransaction的方法
FragmentTransaction transaction = fm.benginTransatcion();//開啟一個事務
transaction.add()
往Activity中新增一個Fragment
transaction.remove()
從Activity中移除一個Fragment,如果被移除的Fragment沒有新增到回退棧(回退棧後面會詳細說),這個Fragment例項將會被銷燬。
transaction.replace()
使用另一個Fragment替換當前的,實際上就是remove()然後add()的合體~
transaction.hide()
隱藏當前的Fragment,僅僅是設為不可見,並不會銷燬
transaction.show()
顯示之前隱藏的Fragment
detach()
會將view從UI中移除,和remove()不同,此時fragment的狀態依然由FragmentManager維護。
attach()
重建view檢視,附加到UI上並顯示。
transatcion.commit()//提交一個事務
注意:常用Fragment的哥們,可能會經常遇到這樣Activity狀態不一致:State loss這樣的錯誤。主要是因為:commit方法一定要在Activity.onSaveInstance()之前呼叫。
上述,基本是操作Fragment的所有的方式了,在一個事務開啟到提交可以進行多個的新增、移除、替換等操作。
值得注意的是:如果你喜歡使用Fragment,一定要清楚這些方法,哪個會銷燬檢視,哪個會銷燬例項,哪個僅僅只是隱藏,這樣才能更好的使用它們。
a、比如:我在FragmentA中的EditText填了一些資料,當切換到FragmentB時,如果希望會到A還能看到資料,則適合你的就是hide和show;也就是說,希望保留使用者操作的皮膚,你可以使用hide和show,當然了不要使勁在那new例項,進行下非null判斷。
b、再比如:我不希望保留使用者操作,你可以使用remove(),然後add();或者使用replace()這個和remove,add是相同的效果。
c、remove和detach有一點細微的區別,在不考慮回退棧的情況下,remove會銷燬整個Fragment例項,而detach則只是銷燬其檢視結構,例項並不會被銷燬。那麼二者怎麼取捨使用呢?如果你的當前Activity一直存在,那麼在不希望保留使用者操作的時候,你可以優先使用detach。

Android Fragment 真正的完全解析(下)
內容簡介:
1、如何管理Fragment回退棧
2、Fragment如何與Activity互動
3、Fragment與Activity互動的最佳實踐
4、沒有檢視的Fragment的用處
5、使用Fragment建立對話方塊
6、如何與ActionBar,MenuItem整合等


這裡寫圖片描述

相關文章