无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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ó)家法律
梧州市| SHOW| 白玉县| 武汉市| 利川市| 潜江市| 彭阳县| 梧州市| 潢川县| 柘城县| 石渠县| 乌兰县| 云梦县| 黎平县| 遵义县| 县级市| 长垣县| 海宁市| 来凤县| 彭水| 陆丰市| 平阳县| 宜春市| 通许县| 太和县| 徐闻县| 天柱县| 广南县| 岳西县| 涞源县| 黄大仙区| 荥经县| 广丰县| 五台县| 仁寿县| 高密市| 洛扎县| 锡林郭勒盟| 阿尔山市| 馆陶县| 广宁县|