现在有个需求是在 AlertDialog中点击确认后,发现AlertDialog中的某个输入框的内容为空,需要提示用户,填写后再调用确认后的操作,但是在点击确认后,AlertDialog就消失了,所以需要稍微修改下,让点击后校验不通过时,不让AlertDialog 消失。
代码如下:
核心代码
try {
Field field = dialogInterface.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialogInterface, false); //要消失时把false 改成true,在确认按钮中加如此代码后,取消按钮也得加,否则取消时不会消失
dialogInterface.dismiss();
} catch (Exception e) {
e.printStackTrace();
}
完整代码如下:
new AlertDialog.Builder(mContext).setTitle("拒绝取消理由")
.setView(reason)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(reason.getText().toString().trim().isEmpty()){
UHelper.showToast(mContext,"请输入拒绝的理由!");
try {
Field field = dialogInterface.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialogInterface, false);
dialogInterface.dismiss();
} catch (Exception e) {
e.printStackTrace();
}
}else{
clickCancelRefuse(bean, reason.getText().toString().trim());
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
try {
Field field = dialogInterface.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialogInterface, true);
dialogInterface.dismiss();
} catch (Exception e) {
e.printStackTrace();
}
dialogInterface.dismiss();
}
})
.show();