当我们在用到AlertDialog.Builder创建对话框的时候,我们会遇到一个问题就是:我们添加的按钮不论是用setNegativeButton还是用setPositiveButton添加的按钮,点击的时候,都会关闭对话框,但我们的一些实际需求,就需要保留这个对话框。
在源码中有一个boolean变量是控件对话框的关闭与否的mShowing变量,我们只需要利用反射改变这个变量就可以控制我们的对话框是不是关闭。
可以通过手动设置mShowing的值可以通过手动设置mShowing的值。
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("标题");
builder.setView(view);
builder.setIcon(R.mipmap.ic_applogorec); //设置图标
builder.setCancelable(false);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
if(true){
field.set(dialog, true);//true表示要关闭
} else{
field.set(dialog, false);//false不关闭
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
builder.setNegativeButton("关闭", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//一旦上面设置了不关闭DIALOG,点取消也不会关闭,所以需在取消事件下设置为可关闭
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);//true表示要关闭
} catch (Exception e){
e.printStackTrace();
}
dialog.cancel();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
本文介绍如何通过反射修改AlertDialog.Builder的mShowing字段,实现点击自定义按钮时不关闭对话框,适用于Android开发中特定需求的对话框定制。

3499

被折叠的 条评论
为什么被折叠?



