我有一个带有几个输入控件元素的对话框片段 A。当用户为某些字段输入无效值时,会弹出一个带有验证错误消息的对话框 B。
问题是当我关闭对话框 B 时,对话框 A 不可见。这对用户不友好——如果对话框有 10 个值并且用户为其中的 9 个输入了正确的值,那么在验证错误的情况下,他/她必须再次重新输入这 9 个正确的值。
A 和 B 都使用AlertDialog
.
如何实现验证错误消息的显示,以便用户可以返回对话框 A、更正错误值并再次按下 OK 按钮?
我有一个带有几个输入控件元素的对话框片段 A。当用户为某些字段输入无效值时,会弹出一个带有验证错误消息的对话框 B。
问题是当我关闭对话框 B 时,对话框 A 不可见。这对用户不友好——如果对话框有 10 个值并且用户为其中的 9 个输入了正确的值,那么在验证错误的情况下,他/她必须再次重新输入这 9 个正确的值。
A 和 B 都使用AlertDialog
.
如何实现验证错误消息的显示,以便用户可以返回对话框 A、更正错误值并再次按下 OK 按钮?
这是kludge-y,但我已经设法让它为我工作。你这样做的方式,在警报对话框上显示验证错误(并防止对话框被关闭)是覆盖OnClickListener
对话框按钮。您可能会想“我已经在这样做了……谢谢混蛋”,但这就是诀窍。您可能正在打电话AlertDialog.Builder().setTitle().setView().setPositiveButton(title, new OnClickListener() {...validation logic...}).create();
然后返回。如果你想防止对话框被关闭,你需要OnShowListener
在对话框中添加一个(在它被创建之后)并覆盖按钮 click there。这是一个例子:
不起作用的方式:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Dialog example").setPositiveButton(android.R.string.ok, new Dialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do some validation logic
if (!valid) {
myEditText.setError(R.string.invalid_value); //
} else {
dialog.dismiss();
}
}
});
Dialog dialog = builder.create();
// show the dialog, or return it, whatever you're going to do with it
所以上面的方法不起作用,因为onClickListener
在默认调用之前调用了你的调用,这将关闭对话框。这是解决它的一种方法:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Dialog example").setPositiveButton(android.R.string.ok, null);
Dialog dialog = builder.create();
dialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// do some validation logic
if (!valid) {
myEditText.setError(R.string.invalid_value); //
} else {
dialog.dismiss();
}
}
}
});
请记住,您有责任解雇它!