Android形形色色的彈出框(中)

1 前言

上文我們實現(xiàn)了基本的對話框,但是這個話題并沒有進(jìn)行完。我們緊接上文,沒有廣告,精彩馬上開始。

2自定義對話框視圖

使用AlertDialog創(chuàng)建對話框,實現(xiàn)自定義視圖是非常簡單的事情,只需要調(diào)用setView(View v)方法傳入一個View就行了,so easy!當(dāng)然,如果你將確定或取消的按鈕自己寫在了布局里,點擊后你就需要自己去控制對話框的關(guān)閉了。

3 DialogFragment簡介

DialogFragment是個什么鬼?從名字看是對話框碎片,沒錯,我為我的英文水平感到驕傲。在Android3.0出現(xiàn)碎片之后,google官方就強(qiáng)烈推薦使用DialogFragment代替直接使用AlertDialog,在我個人使用下來的感受是,確實比之前靈活很多。為什么要放棄直接使用AlertDialog呢?原因有三:

  1. 碎片的復(fù)用性更好,碎片對話框不光能最為一個對話框,還能當(dāng)成一個普通的碎片來復(fù)用
  2. 碎片有完整的生命周期,更好管理對話框的創(chuàng)建、顯示、銷毀
  3. 和Activity實現(xiàn)了完全的解耦,使用這種方式,你的對話框和Activity基本上沒啥關(guān)系

4 DialogFragment的用法

記好,DialogFragment有兩個身份:
1.對話框
2.普通的Fragment

如果你只想單純的把它當(dāng)做一個對話框使用,你應(yīng)該用這個姿勢使用它

繼承自DialogFragment

1.創(chuàng)建。復(fù)寫public Dialog onCreateDialog(Bundle savedInstanceState)方法,注意,返回值是一個Dialog。此方法用來創(chuàng)建一個對話框,onCreateDialog方法內(nèi)實現(xiàn)和上文提到的AlertDialog完全一致,只需要在最后將創(chuàng)建好的AlertDialog返回回去就行了

2.顯示。使用show(FragmentManager manager, String tag) 方法去顯示出來

3.銷毀 。點擊任何一個按鈕或者對話框之外的區(qū)域都會銷毀,這點和AlertDialog的特性是一致的

使用這種方式創(chuàng)建對話框的特點:

1.不再是雙重身份,只能作為一個對話框存在,相當(dāng)于DialogFragment只是作為承載AlertDialog的容器了。

2.DialogFragment沒有后退棧

3.顯示的時候有兩個show方法:show(FragmentManager manager, String tag)show(FragmentTransaction transaction, String tag),注意這兩個方法的第一個參數(shù)類型不同,這里使用哪個都可以,只是既然沒有后退棧,就沒必要傳入事務(wù)了,推薦優(yōu)先使用前者

那如何才能讓DialogFragment具有雙重身份呢?讓我們換個姿勢使用它。

1.繼承自它自然不必強(qiáng)調(diào)了

2.創(chuàng)建的時候,復(fù)寫public View onCreateView()方法,是不是覺得很熟悉???沒錯,就是和普通的Fragment創(chuàng)建視圖的方式完全一樣

3.顯示。這里需要分兩種情況,也就是說你需要讓它以對話框身份顯示還是以普通Fragment方式顯示。如果是作為對話框,調(diào)用show方法就可以了,show方法的第一個參數(shù)仍然傳遞碎片管理者或碎片事務(wù)都行,區(qū)別在于碎片事務(wù)支持后退棧;如果作為普通碎片使用的話,那就不必多說了,和平時的使用方式完全一致,使用碎片事務(wù)進(jìn)行add操作并提交就行了。


這種創(chuàng)建方式的特點

1.創(chuàng)建時和普通碎片用法完全一致,我們可以平滑的過渡,降低學(xué)習(xí)成本
2.靈活性高,雙重身份

3.支持后退棧,可以使用碎片事務(wù)的全部特性

個人認(rèn)為,第二種創(chuàng)建方式明顯優(yōu)于第一種,這也許是google大力提倡使用DialogFragment代替AlertDialog的最主要的原因吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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