我有一个包含多个输入控件元素的对话框片段A.当用户为某个字段输入无效值时,会弹出一个带有验证错误消息的对话框B.
问题是当我关闭对话框B时,对话框A不可见。这不是用户友好的 - 如果对话框有10个值,并且用户为其中9个输入了正确的值,那么在验证错误的情况下,他/她必须再次重新输入这9个正确值。
A和B都是使用AlertDialog
实现的。
如何实现验证错误消息的显示,以便用户可以返回对话框A,更正错误的值并再次按下OK按钮?
答案 0 :(得分:1)
这是kludge-y,但我设法让它为我工作。执行此操作的方式,在警报对话框中显示验证错误(并防止对话框被解除)是覆盖对话框按钮的OnClickListener
。你可能会想“我已经这样做了......感谢混蛋”,但这就是诀窍。你可能正在调用AlertDialog.Builder().setTitle().setView().setPositiveButton(title, new OnClickListener() {...validation logic...}).create();
然后返回它。如果您想阻止对话框被解除,您需要在对话框中添加OnShowListener
(创建后)并覆盖按钮 。这是一个例子:
不起作用的方式:
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();
}
}
}
});
请记住,你有责任解雇它!