简体   繁体   中英

Check if EditText is empty in real time

In one activity of my app I have 5 EditText fields. However, I want etPlayer5 only to be enabled when the other 4 EditTexts are not empty. I wrote this little code to achieve this:

    etPlayer1 = (EditText) findViewById(R.id.etPlayer1);
    etPlayer2 = (EditText) findViewById(R.id.etPlayer2);
    etPlayer3 = (EditText) findViewById(R.id.etPlayer3);
    etPlayer4 = (EditText) findViewById(R.id.etPlayer4);
    etPlayer5 = (EditText) findViewById(R.id.etPlayer5);

    if (namePlayer1.matches("")||namePlayer2.matches("")||namePlayer3.matches("")||namePlayer4.matches("")) {
        etPlayer5.setEnabled(false);
        etPlayer5.setFocusable(false);
    }
    else {
        etPlayer5.setEnabled(true);
        etPlayer5.setFocusable(true);
    }

Of course this code doesn't work in real time. What do I need to do that when the last of the EditTexts 1 to 4 is filled in, etPlayer5 is automatically set enabled without using a button or something?

Thank you!

You can have textChangeListener with all 4 Edittexts and keep boolean against all edittext. Update booleans to true when you get call of onTextChange and see if the string length is one in this edittext and further check remaining booleans are also true.This is the trick. Now this is the time to make the edittext enable.Hope that helps.Below is the code for above explanation

public class MainActivity extends AppCompatActivity {

EditText et1, et2, et3, et4, et5;
boolean firsEditText, secondEditText, thirdEditText,  fourthEditText, fifthEditText;

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

    et1 = (EditText) findViewById(R.id.et1);
    et2 = (EditText) findViewById(R.id.et2);
    et3 = (EditText) findViewById(R.id.et3);
    et4 = (EditText) findViewById(R.id.et4);
    et5 = (EditText) findViewById(R.id.et5);

    et1.addTextChangedListener(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) {
            if (s.toString().length() > 0) {
                firsEditText = true;
                if (checkAllTrue())
                    et5.setEnabled(true);
            } else {
                firsEditText = false;
                et5.setEnabled(false);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    et2.addTextChangedListener(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) {
            if (s.toString().length() > 0) {
                secondEditText = true;
                if (checkAllTrue())
                    et5.setEnabled(true);
            } else {
                secondEditText = false;
                et5.setEnabled(false);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    et3.addTextChangedListener(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) {
            if (s.toString().length() > 0) {
                thirdEditText = true;
                if (checkAllTrue())
                    et5.setEnabled(true);
            } else {
                thirdEditText = false;
                et5.setEnabled(false);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    et4.addTextChangedListener(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) {
            if (s.toString().length() > 0) {
                fourthEditText = true;
                if (checkAllTrue())
                    et5.setEnabled(true);
            } else {
                fourthEditText = false;
                et5.setEnabled(false);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });


}

private boolean checkAllTrue() {
    if (firsEditText && secondEditText && thirdEditText && fourthEditText)
        return true;
    return false;
}

}

You could do something like this

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    boolean player1Changed = false, player2Changed = false;

    setContentView(R.layout.main);
    etPlayer1 = (EditText) findViewById(R.id.etPlayer1);
    etPlayer2 = (EditText) findViewById(R.id.etPlayer2);
    etPlayer5 = (EditText) findViewById(R.id.etPlayer5);

    etPlayer1.addTextChangedListener(new TextWatcher() {

      public void afterTextChanged(Editable s) {

        // you can call or do what you want with your EditText here
        player1Changed = true;

        if(player1Changed && player2Changed){
           etPlayer5.setEnabled(true);
           etPlayer5.setFocusable(true);
        }

      }

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

      public void onTextChanged(CharSequence s, int start, int before, int count) {}
   });
}

etPlayer2.addTextChangedListener(new TextWatcher() {

      public void afterTextChanged(Editable s) {

        // you can call or do what you want with your EditText here
        player2Changed = true;

        if(player1Changed && player2Changed){
           etPlayer5.setEnabled(true);
           etPlayer5.setFocusable(true);
        }

      }

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

      public void onTextChanged(CharSequence s, int start, int before, int count) {}
   });
}
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM