最近在維護(hù)更新代碼筆記時(shí)遇到一個(gè)需求:自定義一個(gè)帶編輯框的AlertDialog仑濒,當(dāng)用戶點(diǎn)擊確認(rèn)按鈕時(shí),對(duì)輸入框內(nèi)容進(jìn)行判斷,如果內(nèi)容為空則不關(guān)閉對(duì)話框并使用Toast提示拐云。
正常情況下使用AlertDialog.Builder構(gòu)建的對(duì)話框在點(diǎn)擊AlertDialog的按鈕時(shí)系統(tǒng)會(huì)自動(dòng)將對(duì)話框關(guān)閉婿着。
對(duì)于這個(gè)需求授瘦,我們可以使用反射實(shí)現(xiàn):
1.反射獲取Dialog類的mShowing成員屬性:
Field mShowing = Dialog.class.getDeclaredField("mShowing");
2.因?yàn)镈ialog類的mShowing屬性是使用private修飾的幸海,所以需要使用setAccessible(boolean flag);方法來取消Java語言訪問檢查(對(duì)mShowing屬性設(shè)置訪問權(quán)限):
mShowing.setAccessible(true);
3.通過set(Object obj, Object value);方法將mShowing屬性設(shè)為true:
mShowing.set(dialog, true);
需要關(guān)閉對(duì)話框時(shí)將mShowing屬性設(shè)為false即可。
完整代碼:
try {
Field mShowing = Dialog.class.getDeclaredField("mShowing");
mShowing.setAccessible(true);
mShowing.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}
在對(duì)話框的按鈕監(jiān)聽器里添加如上代碼即可實(shí)現(xiàn)點(diǎn)擊AlertDialog的按鈕不關(guān)閉對(duì)話框奥务。
本文為安卓?夢(mèng)雪原創(chuàng)文章物独,轉(zhuǎn)載請(qǐng)注明出處,謝謝氯葬!