简体   繁体   English

实时检查EditText是否为空

[英]Check if EditText is empty in real time

In one activity of my app I have 5 EditText fields. 在我的应用程序的一项活动中,我有5个EditText字段。 However, I want etPlayer5 only to be enabled when the other 4 EditTexts are not empty. 但是,我希望仅在其他4个EditText不为空时启用etPlayer5 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? 当填写了EditTexts 1至4的最后一个,而无需使用按钮或其他东西时, etPlayer5自动设置为启用时,我该怎么办?

Thank you! 谢谢!

You can have textChangeListener with all 4 Edittexts and keep boolean against all edittext. 您可以将textChangeListener与所有4个Edittext一起使用,并对所有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. 当您收到onTextChange的调用时将布尔值更新为true,并查看此edittext中的字符串长度是否为1,然后进一步检查其余布尔值是否为true。 Now this is the time to make the edittext enable.Hope that helps.Below is the code for above explanation 现在是时候启用edittext了,希望对您有所帮助,下面是上面解释的代码

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) {}
   });
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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