#android #android-widget
#Android #android-виджет
Вопрос:
Привет
В моем приложении для Android я хочу получать входные данные пользователя из виджета EditText в AlertDialog. Если пользователь не вводит разрешенный текст и не нажимает кнопку подтверждения, AlertDialog не следует закрывать и следует дать какой-либо ответ, как мне следует поступить?
Вот мой текущий код:
li = LayoutInflater.from(this);
View editNickView = li.inflate(R.layout.dialog_edit_nick,
null);
AlertDialog.Builder editNickBuilder = new AlertDialog.Builder(
this);
editNickBuilder.setTitle(R.string.edit_nick);
editNickBuilder.setView(editNickView);
AlertDialog editNick = editNickBuilder.create();
editNick.setButton(getText(R.string.com_confirm),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
AlertDialog editNick = (AlertDialog)dialog;
EditText et = (EditText)editNick.findViewById(R.id.et_nick_new);
mCurUser.setName(et.getText().toString()) ;
editNick(mCurUser);
}
});
editNick.setButton2(getText(R.string.com_cancel),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
return editNick;
Спасибо!
Ответ №1:
AlertDialog всегда закрывается при нажатии на одну из его кнопок. Если вы не хотите, чтобы это произошло, не вызывайте setButton, просто поместите свои кнопки в свой пользовательский макет xml. Проверьте предварительное условие и вызовите editNick.dismiss()
, чтобы закрыть диалоговое окно, когда это необходимо.
Некоторые фрагменты могут помочь:
View editNickView = li.inflate(R.layout.dialog_edit_nick, null);
....
final AlertDialog editNick = editNickBuilder.create();
Button button = (Button) editNickView.findViewById(R.id.your_button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
....
if(shouldClose) {
editNick.dismiss();
}
else {
//Make a toast or something here.
}
}
});
Ответ №2:
Для этого разместите свои кнопки в линейном макете ИЛИ в layout и не используйте кнопки по умолчанию, предоставляемые AlertDialog.
После установки кнопки в XML-файле вы создаете объект кнопок с помощью:
Button b1 = editNickView.findViewById(<ID of button1>);
и затем вы создаете прослушиватель для этой кнопки. Теперь в прослушивателе, если вы обнаружите, что пользователь ввел правильный ввод, вызовите :
editNick.dismiss();
чтобы закрыть диалоговое окно, в противном случае диалоговое окно будет видно пользователю.