国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
成安县| 宽城| 凤山县| 岳普湖县| 大荔县| 探索| 全州县| 五河县| 额敏县| 冕宁县| 太白县| 黄龙县| 葵青区| 肃宁县| 曲沃县| 沧州市| 秦皇岛市| 三都| 婺源县| 临湘市| 新田县| 南阳市| 梁山县| 崇明县| 花莲市| 保亭| 江都市| 星座| 江永县| 长泰县| 乌什县| 西乌珠穆沁旗| 宣威市| 溧阳市| 岚皋县| 二连浩特市| 嘉善县| 托克托县| 微博| 治县。| 凤阳县|