Android Fragment 生命周期

問題由來

最近開始嘗試使用Kotlin,體驗(yàn)如下



這種直接調(diào)用控件id進(jìn)行的操作,發(fā)現(xiàn)在Fragment中并不可以,會(huì)報(bào)錯(cuò):

Caused by: java.lang.IllegalStateException: xxx must not be null

不能直接使用控件id的原因是,xml文件還沒有載入。這就類似于在Activity中要在setContentView之后再使用findViewById。

解決方法

重寫了Fragment的onViewCreated方法,在這個(gè)方法內(nèi)部對控件進(jìn)行操作。但是在Fragment的官方文檔中卻沒有出現(xiàn)過這個(gè)方法,所以自己來捋一下Fragment的聲明周期。

Fragment的生命周期

先放兩張經(jīng)典的圖

Fragment的生命周期:


Fragment 生命周期

Activity和Fragment生命周期對比:


觀察生命周期

重寫了圖中所有方法以及onViewCreated方法,在方法內(nèi)打印方法名

切換到該Fragment

2018-12-11 15:58:00.750 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onAttach
2018-12-11 15:58:00.750 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onCreate
2018-12-11 15:58:00.750 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onCreateView
2018-12-11 15:58:00.756 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onViewCreated
2018-12-11 15:58:00.757 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onActivityCreated
2018-12-11 15:58:00.757 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStart
2018-12-11 15:58:00.758 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onResume

返回

聲明:此處用的是Jetpack的Navigation,直接按返回鍵返回至nav_host_fragment
所以這個(gè)返回可以看做是銷毀該Fragment

2018-12-11 16:19:45.527 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onPause
2018-12-11 16:19:45.528 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStop
2018-12-11 16:19:45.528 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onDestroyView
2018-12-11 16:19:46.006 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onDestroy
2018-12-11 16:19:46.007 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onDetach

熄屏(回到桌面)

2018-12-11 16:21:31.700 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onPause
2018-12-11 16:21:31.738 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStop

解鎖(返回應(yīng)用)

2018-12-11 16:21:34.390 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStart
2018-12-11 16:21:34.406 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onResume

總結(jié)

  • Fragment的生命周期比Activity多了一些,但總體對接的上。
  • onViewCreated在onCreateView之后調(diào)用,所以控件操作可以在這個(gè)方法內(nèi)進(jìn)行。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容