在Android系统中,默认点击AlertDialog中的按键都会关闭该AlertDialog,但有些情况下我们并不希望使对话框关闭,或者希望使对话框在自己需要的时候再关闭。
例如我现在做的一个项目,通过AlertDialog读取用户输入的一个值,希望只有在判断值为正确范围内才关闭该对话框,否则对话框予以保留,并给以用户相应的提醒。
可以利用反射的机制来实现这一效果:
不关闭对话框:
1
2
3
4
5
6
7
8
9
10
|
// 使对话框无法关闭 try {
Field field =
dialog.getClass().getSuperclass().getDeclaredField( "mShowing" );
field.setAccessible( true );
field.set(dialog, false );
} catch (Exception e) {
e.printStackTrace();
} |
关闭对话框:
1 // 使对话框关闭 2 try { 3 Field field = 4 dialog.getClass().getSuperclass() 5 .getDeclaredField("mShowing"); 6 field.setAccessible(true); 7 field.set(dialog, true); 8 } 9 catch (Exception e) { 10 e.printStackTrace(); 11 }