Android阻止AlertDialog自动关闭

Android开发中,AlertDialog使用相当频繁,基本是必须使用的

它的使用方法非常简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
alertDialog = newAlertDialog.Builder(mContext)
.setTitle("提示")
.setMessage("你确定要删除该附件吗?")
.setPositiveButton("删除", newDialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface dialog, int which) {
//点击确定按钮之后的代码...
}
})
.setNegativeButton("取消", newDialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface dialog, int which) {
//点击取消按钮之后的代码...
}
})
.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.show();

可以发现AlertDialog默认不管点击确定还是取消都会dismiss的

如何实现AlertDialog点击确定按钮不会dismiss呢,使用反射机制,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    alertDialog = new AlertDialog.Builder(mContext)
.setTitle("提示")
.setMessage("你确定要删除该附件吗?")
.setPositiveButton("删除", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
preventDismissDialog();
//添加删除请求代码...
......
alertDialog.setMessage("正在删除附件,请稍后...");
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismissDialog();
}
})
.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.show();


/**
* 关闭对话框
*/
private void dismissDialog() {
try {
Field field = alertDialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(alertDialog, true);
} catch (Exception e) {
}
alertDialog.dismiss();
}

/**
* 通过反射 阻止关闭对话框
*/
private void preventDismissDialog() {
try {
Field field = alertDialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
//设置mShowing值,欺骗android系统
field.set(alertDialog, false);
} catch (Exception e) {
e.printStackTrace();
}
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :