Search code examples
javaandroidandroid-edittexttextwatcher

How to disable button with multiple edit text using Textwatcher?


I am trying to disable my button if my input edit texts are empty. I am using text watcher for this. To test it out , i have only tried with only two edit texts to start. However, my button stays enabled no matter what.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_profile);

    fnameInput = findViewById(R.id.et_firstname);
    lnameInput = findViewById(R.id.et_lastname);
    numberInput = findViewById(R.id.et_phone);
    emailInput = findViewById(R.id.et_email);
    nextBtn = findViewById(R.id.btn_next);

    fnameInput.addTextChangedListener(loginTextWatcher);
    lnameInput.addTextChangedListener(loginTextWatcher);


    nextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            launchNextActivity();
        }
    });
}

Text watcher method

private TextWatcher loginTextWatcher = new TextWatcher() {

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        String firstNameInput =firstNameInput.getText().toString().trim();
        String lastNameInput = lastNameInput.getText().toString().trim();


        // tried doing it this way 
        nextBtn.setEnabled(!firstNameInput.isEmpty() && !lastNameInput.isEmpty());

        //What i've also tried 
        if(firstNameInput.length()> 0 &&
                lastNameInput.length()>0){
            nextBtn.setEnabled(true);
        } else{
            nextBtn.setEnabled(false);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

I expect the button to be disabled if one or all inputs are empty and enabled when all input fields are filled out.


Solution

  • create a method check all condition there like

    private void checkTheConditions(){
      if(condition1 && condition2)
      nextBtn.setEnabled(true)
      else
      nextBtn.setEnabled(false)
    }
    

    call this method from afterTextChanged(Editable s) method