最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

DevLog 11.1 LocalDate & DialogFragment

2021-11-03 17:03 作者:房頂上的鋁皮水塔  | 我要投稿

參考內(nèi)容:


1. Java 8新特性(四):新的時(shí)間和日期API:?https://lw900925.github.io/java/java8-newtime-api.html



使用LocalDate而不是Calendar、SimpleDateFormat?

使用SimpleDateFormat可能會(huì)出現(xiàn)以下問題:

  1. 構(gòu)建SimpleDateFormat的開銷大

  2. ?SimpleDateFormat.format parse是線程不安全

LocalDate 的簡(jiǎn)單使用:


其中with接受一個(gè)TemporalAdjuster函數(shù)接口,其中接受一個(gè)Temporal參數(shù),它是LocalDate的父類。API中給出的其他的TemporalAdjuster的相關(guān)實(shí)現(xiàn)有:

但是LocalDate直到Api26 Oreo才支持,所以需要使用joda-time這些類。

DialogFragment

DialogFragment = Dialog + Fragment

Dialog具有自己的window,會(huì)自行處理點(diǎn)擊事件,并且會(huì)自行決定什么時(shí)候disappear。

Dialog中Window創(chuàng)建的時(shí)機(jī)

Dialog的生命周期

onCreate show onStart cancel onDismiss Stop

AlertDialog#show 的執(zhí)行流程:


AlertDialog#create:

所以,AlertDialog#create這一步實(shí)質(zhì)上是將window進(jìn)行初始化,但是View并沒有添加到window中(View添加到Window中的標(biāo)志應(yīng)該是調(diào)用WindowManager#addView)。

Dialog#show

從圖上我們可以看到Dialog的onCreate的調(diào)用是在show方法中,并且是在show中將傳入的View參數(shù)添加到了Window中,我們簡(jiǎn)要的看看代碼:

最后調(diào)用了一個(gè)sendShowMessage方法,這個(gè)方法會(huì)關(guān)聯(lián)到這個(gè)Handler的實(shí)現(xiàn)類:

這三個(gè)回調(diào)接口都是定義在Dialog相關(guān)的頂級(jí)父類DialogInterface中的,因此我們可以通過設(shè)置回調(diào)函數(shù)監(jiān)聽Dialog的一些行為:

DialogFragment

好像繞的有點(diǎn)遠(yuǎn),那我們回到我們的正題DialogFragment。

其實(shí)DialogFragment就是Fragment,只不過其中有一個(gè)Dialog的實(shí)例。DialogFragment給我了更為簡(jiǎn)單的操作,你可以將它是做Fragment,重寫onCreateView,也可以重寫onCreateDialog。根據(jù)onCreateDialog的注釋來看,結(jié)合Fragment的生命周期,這幾個(gè)回調(diào)函數(shù)的調(diào)用順序是:

onCreate -> onCreateDialog -> onCreateView,如果使用onCreateDialog創(chuàng)建UI,就沒必要使用onCreateView。

onCreateDialog會(huì)調(diào)用Dialog的構(gòu)造函數(shù),然后會(huì)創(chuàng)建Window。


使用onCreateDialogView什么時(shí)候被加入Window中?

如果我們使用onCreateDialog,那我們的View什么時(shí)候會(huì)被加入window呢?


假設(shè)我們直接用onCreateDialog,跳過onCreateView,后續(xù)的生命周期會(huì)走到onActivityCreated,這里會(huì)調(diào)用Dialog#setContentView,將View放到Dialog專屬的Window中:

PS: AlertDialog.Builder#setView其實(shí)只是將View存起來了而已:

總結(jié)一下,所以不管使用onCreateView還是onCreateDialog都會(huì)將加載的View放到window中,大家不需要擔(dān)心~


DialogFragment#show

Dialog和Fragment并不是個(gè)人自掃門前雪的狀態(tài),兩個(gè)各自有生命周期的組件DialogFragment都將兩者的生命周期考慮了:

乍一看,這里面怎么沒有調(diào)用Dialog#show,但是Dialog和Fragment肯定共用一個(gè)Window,

只要DialogFragment能被顯示出來,UI肯定可以顯示。


DialogFragment#dismiss

dismiss的話就很清楚了,首先要移除掉dialog,并且使用Transaction移除Fragment



DevLog 11.1 LocalDate & DialogFragment的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
长沙县| 靖江市| 蕉岭县| 左云县| 渝中区| 达州市| 张北县| 清涧县| 赫章县| 华池县| 连山| 玉门市| 新疆| 沁源县| 芮城县| 呼伦贝尔市| 金坛市| 江都市| 开鲁县| 金平| 昌都县| 牟定县| 松原市| 齐河县| 高雄县| 监利县| 屏东市| 鄢陵县| 佛学| 清流县| 九寨沟县| 瑞安市| 梁平县| 射洪县| 景宁| 托克逊县| 蚌埠市| 桑日县| 体育| 新民市| 淮北市|