ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-06-24 01:20:34  阅读:281  来源: 互联网

标签:android android-dialog android-alertdialog


作为标题,我在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文件.

解决方法:

尽管您需要更改代码,但您已经采用了正确的方法.
请看下面的代码:

   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布局.在视图中对布局进行膨胀,并在AlertDialog实例的setView方法中传递该视图.
只需使用AlertDialog的实例覆盖setOnShowListener.
此后,检索正负按钮,如上所示.
而已.

标签:android,android-dialog,android-alertdialog
来源: https://codeday.me/bug/20190624/1275756.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有