android:对话框:有输入框时如验证错误不关闭对话框
一,代码:
//给按钮增加点击事件
Button button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher_background)
.setTitle("对话框")
.setMessage("请输入新的用户名");
EditText input = new EditText(MainActivity.this);
builder.setView(input);
//确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Field field = null;
try {
//通过反射获取dialog中的私有属性mShowing
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);//设置该属性可以访问
} catch (Exception ex) {
}
//判断是否输入为空
String userInput = input.getText().toString();
if (userInput == null || "".equals(userInput)) {
try {
//设置dialog不可关闭
field.set(dialog, false);
//提示错误
Toast.makeText(MainActivity.this, "输入不能为空!", Toast.LENGTH_LONG).show();
} catch (Exception ex) {
}
} else {
// 处理自己的业务逻辑
// 在此处处理用户输入的内容
Toast.makeText(MainActivity.this, "输入信息为:"+userInput, Toast.LENGTH_LONG).show();
try {
//关闭对话框
field.set(dialog, true);
dialog.dismiss();
} catch (Exception ex) {
}
}
}
});
//取消按钮
builder.setNegativeButton("取消", (dialog, which) -> {
Field field = null;
try {
//通过反射获取dialog中的私有属性mShowing
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);//设置该属性可以访问
//关闭对话框
field.set(dialog, true);
dialog.dismiss();
} catch (Exception ex) {
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
});
二,测试效果:
输入不合法时,对话框也没有关闭

浙公网安备 33010602011771号