Android移動開發(fā)通過反射實現(xiàn)點擊AlertDialog的按鈕時不關閉對話框

最近在維護更新代碼筆記時遇到一個需求:自定義一個帶編輯框的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)文章,轉載請注明出處,謝謝!

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

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

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