Я проверяю наличие недопустимого ввода в группу редактируемых текстов в диалоговом окне предупреждения, проверяя нулевой ввод и вызывая setError
. Но в моей текущей реализации диалог все еще закрывается, несмотря на то, что был введен неверный ввод.Использование setError для проверки правильности ввода текста Android
Логическое проверка была добавлена к каждому тексту редактирования, чтобы предотвратить диалог от увольнения, если какой-либо из редактирования текстов установить логическое значение ЛОЖЬ, как это:
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();
}
}
возможно дубликат [Как для подтверждения ввода текстового ввода в Android?] (http://stackoverflow.com/questions/27788043/how-to-validate-edit-text-input-in-android) – Rohit5k2
@ Rohit5k2 не совсем дубликат, th код отличается от последнего вопроса, его обновляет с помощью проверки ввода, но диалог все же разрешается закрывать, несмотря на булевскую проверку, чтобы предотвратить это. Может ли быть так, что логическое значение никогда не срабатывает, поэтому условие никогда не будет выполнено? –
Я уже ответил, почему ваш диалог закрывается только в последнем вопросе. Boolean не поможет здесь. см. комментарий вашего последнего вопроса. – Rohit5k2