Disable Button when Edit Text Fields empty

懵懂的女人 提交于 2019-11-30 11:29:56

Your problem is here:

//set listeners
        editText1.addTextChangedListener(textWatcher);
        editText1.addTextChangedListener(textWatcher);

You are not setting the textWatcher to editText2, so you are always checking the condition if you write inside editText1

I know this is old, but keep in mind that by simply using .isEmpty() will allow you to only add a space and the button will enable itself.

Use s1.trim().isEmpty || s2.trim().isEmpty() instead.

Or, you can do:

String s1 = editText1.getText().toString().trim() String s2 = editText2.getText().toString().trim()

then just check for .isEmpty().

I don't know, it's however you'd want to do it, and this answer is most likely irrelevant anyway but I'd thought I'd just point that out.

You method checkFieldsForEmptyValues is too complicated for what your doing, try just by doing :

 private  void checkFieldsForEmptyValues(){
        Button b = (Button) findViewById(R.id.btnRegister);

        String s1 = editText1.getText().toString();
        String s2 = editText2.getText().toString();

        if (s1.length() > 0 && s2.length() > 0) {
            b.setEnabled(true);
        } else {
            b.setEnabled(false);
        }

}

A different way to do this would be

b.setEnabled(!s1.trim().isEmpty() && !s2.trim().isEmpty());

You may resolve this problem a much shorter:

@Override
protected void onResume() {
    super.onResume();
    TextWatcher tw = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

        @Override
        public void afterTextChanged(Editable editable) {
           updateSignInButtonState();
        }
    };

    editLogin.addTextChangedListener(tw);
    editPassword.addTextChangedListener(tw);

}

private void updateSignInButtonState() {
    buttonSignIn.setEnabled(editLogin.getText().length() > 0 &&
                            editPassword.getText().length() > 0);
}

Instead of this

 if(s1.equals("") && s2.equals(""))
    {
        b.setEnabled(false);
    }

try this

 if(s1.isEmpty() || s2.isEmpty())
    {
        b.setEnabled(false);
    }

change all the validating condition from && this to ||

nguyenthe.0107

My way was:

  1. button setEnabled(false)

  2. I used TextWatcher to listen for text change and update status of button in afterTextChanged function

Here is my code:

TextWatcher tw = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    @Override
    public void afterTextChanged(Editable editable) {
        updateSignInButtonState();
    }
};

public void updateSignInButtonState() {
    btnSubmit.setEnabled(edUsername.getText().length() > 0 &&
            edPassword.getText().length() > 0);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!