Android Alert Dialogボタンをクリックするとダイアログボックスが閉じないという問題を解決


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();
		} 
	}