當我們在用到Android alertDialog創建對話框 的時候,我們會遇到一個問題就是:我們添加的按鈕不論是用setNegativeButton還是用setPositiveButton添加的按鈕,點擊的時候,都會關閉對話框,但是我們的一 些實際需求,就需要保留這個對話框不動,例如輸入校驗碼,密碼之類的校驗問題,如果用戶輸入錯誤,而關閉後彈出對話框,就很別扭了。在網上找了一下,原來在源碼中有一個boolean變量是控件對話框的關閉與否的mShowing變量,我們只需要利用反射改變這個變量就可以控制我們的對話框是不是關閉了。所以,我們可以通過手動設置mShowing的值來達到目的。代碼如下:
如果點擊保持對話框:
- private void keepDialog(DialogInterface dialog) {
- try {
- Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
- field.setAccessible(true);
- field.set(dialog, false);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
相信上面有一定java基礎的都能看懂是寫的什麼,反射這裡不多解釋,很簡單。
mShowing是Dialog類的一個成員變量,在上面的方法中改變之後會影響別的按鈕,如現在點擊“取消”按鈕將不能關閉對話框,解決辦法在“取消”的onClick事件中再改變mShowing的值,如下:
如果點擊關閉對話框:
- private void distoryDialog(DialogInterface dialog){
- try {
- Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
- field.setAccessible(true);
- field.set(dialog, true);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }