繁体   English   中英

实时检查EditText是否为空

[英]Check if EditText is empty in real time

在我的应用程序的一项活动中,我有5个EditText字段。 但是,我希望仅在其他4个EditText不为空时启用etPlayer5 我编写了以下代码来实现此目的:

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

当然,此代码不能实时运行。 当填写了EditTexts 1至4的最后一个,而无需使用按钮或其他东西时, etPlayer5自动设置为启用时,我该怎么办?

谢谢!

您可以将textChangeListener与所有4个Edittext一起使用,并对所有edittext保持布尔值。 当您收到onTextChange的调用时将布尔值更新为true,并查看此edittext中的字符串长度是否为1,然后进一步检查其余布尔值是否为true。 现在是时候启用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;
}

}

你可以做这样的事情

@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