【发布时间】:2015-01-07 00:11:04
【问题描述】:
我正在通过检查空输入并调用setError 在警报对话框中检查对一组编辑文本的无效输入。但在我当前的实现中,即使输入无效,对话框仍会关闭。
每个编辑文本都添加了布尔检查,以防止在任何编辑文本将布尔值设置为 false 时关闭对话框,如下所示:
else if(TextUtils.isEmpty(strColour)) {
colourText.setError("Please enter a value");
entriesValid = false;
` 但是尽管输入无效,对话框仍然被关闭。
我的问题,这里允许对话框在无效输入时关闭的错误是什么?
我在这一行设置了一个断点,if(entriesValid) 来检查条件是否被触发,但这里没有中断,这意味着检查被跳过了。
这是完整的自定义对话框类:
public class MyMessageDialog {
public interface MyMessageDialogListener {
public void onClosed(String ship, String scientist, String email, String volume, String color);
}
@SuppressLint("NewApi")
public static AlertDialog displayMessage(Context context, String title, String message, final MyMessageDialogListener listener){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
LayoutInflater inflater = LayoutInflater.from(context);
builder.setTitle(title);
builder.setMessage(message);
final View layoutView = inflater.inflate(R.layout.custom_view, null);
builder.setView(layoutView);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
boolean entriesValid = true;
// get the edit text values here and pass them back via the listener
if(listener != null)
{
EditText shipText = (EditText)layoutView.findViewById(R.id.shipNameEditText);
EditText scientistNameText = (EditText)layoutView.findViewById(R.id.scientistEditText);
EditText scientistEmailText = (EditText)layoutView.findViewById(R.id.emailEditText);
EditText volumeText = (EditText)layoutView.findViewById(R.id.volumeEditText);
EditText colourText = (EditText)layoutView.findViewById(R.id.colourEditText);
listener.onClosed(shipText.getText().toString(),
scientistNameText.getText().toString(),
scientistEmailText.getText().toString(),
volumeText.getText().toString(),
colourText.getText().toString());
String strShipName = shipText.getText().toString();
String strScientistName = scientistNameText.getText().toString();
String strScientistEmail = scientistEmailText.getText().toString();
String strVolume = volumeText.getText().toString();
String strColour = colourText.getText().toString();
if(TextUtils.isEmpty(strShipName)) {
shipText.setError("Please enter a value");
entriesValid = false;
}
else if(TextUtils.isEmpty(strShipName)) {
shipText.setError("Please enter a value");
entriesValid = false;
}
else if(TextUtils.isEmpty(strScientistName)) {
scientistNameText.setError("Please enter a value");
entriesValid = false;
}
else if(TextUtils.isEmpty(strScientistEmail)) {
scientistEmailText.setError("Please enter a value");
entriesValid = false;
}
else if(TextUtils.isEmpty(strVolume)) {
volumeText.setError("Please enter a value");
entriesValid = false;
}
else if(TextUtils.isEmpty(strColour)) {
colourText.setError("Please enter a value");
entriesValid = false;
}
}
if(entriesValid)
dialog.dismiss();
}
});
builder.show();
return builder.create();
}
}
【问题讨论】:
-
@Rohit5k2 不完全是重复的,此代码与上一个问题不同,它使用输入验证进行了更新,但尽管进行了布尔检查以防止这种情况,但仍允许关闭对话框。是否可能永远不会触发布尔值,因此永远不会满足条件?
-
我已经回答了为什么您的对话框仅在最后一个问题中关闭。布尔值在这里没有帮助。查看您上一个问题的评论。
-
查看您的代码,我怀疑 IF 块是否正在执行,请在 IF 块内添加一条 Log 语句以查看代码是否已执行。最好获取 editText 的值并检查是否为空。它应该可以工作。
-
@Prem 所以我应该试试,
TextUtils.isEmpty(shipNameEditText)?这与上面用于触发 if 块的代码有何不同? @Rohit5k2 提到它可能是因为由于默认侦听器,我需要进行以下更改,但不确定如何进行更改:stackoverflow.com/questions/4016313/…
标签: java android validation android-edittext android-alertdialog