Android: Кнопка в AlertDialog

#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();
  

чтобы закрыть диалоговое окно, в противном случае диалоговое окно будет видно пользователю.