将每个字符的EditText错误设置为null

时间:2019-03-21 07:46:50

标签: android

我有一个接受数字输入的EditText,如果用户在该EditText中输入了错误的数字,则我拥有该数字的正则表达式,错误出现在EditText下方,但是我想检查该EditText中的每个键入的数字,例如用户键入了不在正则表达式中的错误数字,将会出现错误;如果他删除该数字并输入正确的数字,则错误应该消失;对于我而言,在他输入所有剩余数字之后,错误就会消失。我想对每个键入的数字应用验证,以使错误出现和消失。

这是我的代码。

        @Override
    public void afterTextChanged(Editable s) {

        if (s.length() <= 12) {

            if (editMobileNumber.getText().toString() != null) {
                if (focus) {
                    if (!s.toString().startsWith("971")) {
                        editMobileNumber.setText("971");
                        Selection.setSelection(editMobileNumber.getText(), editMobileNumber.getText().length());
                    } else {
                        tvMobileNumber.setVisibility(View.GONE);
                    }
                }
                if (editMobileNumber.getText().toString().length() <= 12) {

                    if (s.length() > 3) {

                        if (UtilHelper.isValidUAENumber(editMobileNumber.getText().toString())) {
                            tvMobileNumber.setVisibility(View.GONE);
                        } else {
                            if(editMobileNumber.getText().toString().length() <= 12){
                                tvMobileNumber.setText(getResources().getString(R.string.txt_number_should_be));
                                tvMobileNumber.setVisibility(View.VISIBLE);
                            }

                        }
                    } else {
                        tvMobileNumber.setVisibility(View.GONE);
                    }
                }
            }
        } else {
            String text = editMobileNumber.getText().toString();
            editMobileNumber.setText(text.substring(0, text.length() - 1));
            editMobileNumber.setSelection(editMobileNumber.getText().length());
        }
    }

1 个答案:

答案 0 :(得分:1)

P,这里有很多东西在进行。 首先,在用户输入一些文本或您的案例编号后,将调用afterTextChanged。 在else情况下,您需要再次更改文本。

String text = editMobileNumber.getText().toString();
editMobileNumber.setText(text.substring(0, text.length() - 1));

您为什么要这样做?没必要吧?

接下来,只有长度小于等于12个字符时,您才比较输入内容

if (s.length() <= 12)

但是,如果我说对了,我想每次都这样做,对吗?即使您输入的数字例如是14个字符,对吗?然后,您应该先更改它。

您还应该考虑将editMobileNumber.getText().toString()排除在自己的变量之外,以使您的代码更具可读性。

接下来的事情是,如果长度至少为4个字符,则仅使用UtilHelper.isValidUAENumber验证输入。

if (s.length() > 3) {

我认为这也不是您所期望的。

同样,这里有很多事情。可能您应该再次检查整个逻辑并尝试理解每个步骤。尝试先减少逻辑,然后逐步改进代码。