无法在自动关闭的Dialog中设置

时间:2015-01-28 10:02:49

标签: android android-alertdialog android-dialog

作为标题,我在EditText mEditText内设置错误时遇到问题。

 private AlertDialog.Builder buildDialog(String mailString)
  {
    final AlertDialog.Builder alertDialogBuilder =
      new AlertDialog.Builder(LoginActivity.this);

    alertDialogBuilder.setTitle("Insert mail");
    alertDialogBuilder.setMessage("email");
    // Set an EditText view to get user input
    mMailEditText = new EditText(LoginActivity.this);
    if (mailString != null)
      mMailEditText.setText(mailString);
    alertDialogBuilder.setView(mMailEditText);
    alertDialogBuilder.setPositiveButton(
      "Ok", new DialogInterface.OnClickListener()
      {
        public void onClick(DialogInterface dialog, int whichButton)
        {
          String email = mMailEditText.getText().toString();
          if (!TextUtils.isEmpty(email) && !isEmailValid(email))
          {
             mMailEditText.setError(getString(
                R.string.activity_login_error_invalid_email));
          }
          else
          {
            attemptLoginOrRegister(UserTasks.REGISTER, email);
          }
        }
      });
    alertDialogBuilder.setNegativeButton(
      "Cancel", new DialogInterface.OnClickListener()
      {
        public void onClick(DialogInterface dialog, int whichButton)
        {
          dialog.cancel();
        }
      });

    mAlertDialog = alertDialogBuilder.create();
    return alertDialogBuilder;
  }

  private void setListeners()
  {
    mRegisterButton.setOnClickListener(
      new View.OnClickListener()
      {
        @Override
        public void onClick(View v)
        {
          buildDialog(null).show();
        }
      });
  }
始终从setListeners()调用

onCreate,而当用户点击注册按钮时调用buildDialog。 调试应用程序时,如果电子邮件无效,则正确执行包含mMailEditText.setError()的行,但不显示错误消息,对话框只会关闭。 我的方法出了什么问题?

编辑:如果需要,here是类代码的简化版本,不需要任何外部库。我还添加了layoutstrings个文件。

1 个答案:

答案 0 :(得分:4)

虽然您需要更改代码,但您已采用正确的方法。 请查看以下代码:

   View view = getLayoutInflater().inflate(R.layout.custom_dialog, null);

   final EditText editTextEmail = (EditText) view.findViewById(R.id.editCategory);

   final AlertDialog alertDialog = new AlertDialog.Builder(LoginActivity.this)
            .setView(view)
            .setPositiveButton(R.string.str_ok, null)
            .setNegativeButton(R.string.str_cancel, null)
            .create();

    alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {

            Button buttonPositive = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE);
            buttonPositive.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                 // Do whatever you want when positive button is clicked
            });

            Button buttonNegative = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
            buttonNegative.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
// Do whatever you want when negative button is clicked
                }
            });
        }
    });

    alertDialog.show();

创建包含所需EditText的XML布局。在视图中对布局进行通知,并在setView实例的AlertDialog方法中传递该视图。 只需使用setOnShowListener的实例覆盖AlertDialog即可。 此后,检索正负按钮,如上所示。 就是这样。