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