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

歡迎光臨散文網(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ó)家法律
阿克苏市| 蒙阴县| 三穗县| 河北省| 隆回县| 资中县| 青州市| 孟津县| 利辛县| 若尔盖县| 营口市| 遵义市| 长沙市| 易门县| 什邡市| 左贡县| 育儿| 拉孜县| 金溪县| 山西省| 株洲市| 仁化县| 湛江市| 美姑县| 福鼎市| 图木舒克市| 乐安县| 沾益县| 玛沁县| 潍坊市| 花莲县| 龙里县| 昌平区| 淮南市| 永德县| 泾源县| 丽水市| 定州市| 邳州市| 渝北区| 弥渡县|