Android 编辑文本字段为空时禁用按钮
我有两个文本字段和一个按钮。我想禁用按钮,除非两个EditText字段都不是空的。我在stackoverflow尝试了很多解决方案,但都不起作用。这是我的密码:Android 编辑文本字段为空时禁用按钮,android,android-edittext,Android,Android Edittext,我有两个文本字段和一个按钮。我想禁用按钮,除非两个EditText字段都不是空的。我在stackoverflow尝试了很多解决方案,但都不起作用。这是我的密码: import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class RegisterActivity extends Activity {
private EditText editText1;
private EditText editText2;
//TextWatcher
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
{
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
checkFieldsForEmptyValues();
}
@Override
public void afterTextChanged(Editable editable) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_activity);
editText1 = (EditText) findViewById(R.id.reg_password);
editText2 = (EditText) findViewById(R.id.reg_password2);
//set listeners
editText1.addTextChangedListener(textWatcher);
editText1.addTextChangedListener(textWatcher);
// run once to disable if empty
checkFieldsForEmptyValues();
TextView loginScreen = (TextView) findViewById(R.id.link_to_login);
loginScreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity (new Intent(getApplicationContext(), DialogActivity.class));
finish();
}
});
}
private void checkFieldsForEmptyValues(){
Button b = (Button) findViewById(R.id.btnRegister);
String s1 = editText1.getText().toString();
String s2 = editText2.getText().toString();
if(s1.equals("") && s2.equals(""))
{
b.setEnabled(false);
}
else if(!s1.equals("")&&s2.equals("")){
b.setEnabled(false);
}
else if(!s2.equals("")&&s1.equals(""))
{
b.setEnabled(false);
}
else
{
b.setEnabled(true);
}
}
}
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);
}
如果我启动该活动,它将被禁用。但是如果我输入一些东西,它有时启用,有时不启用。。如果两个编辑文本字段都不是空的,我只想启用该按钮。而不是此按钮
if(s1.equals("") && s2.equals(""))
{
b.setEnabled(false);
}
试试这个
if(s1.isEmpty() || s2.isEmpty())
{
b.setEnabled(false);
}
将所有验证条件从&&this更改为| |您的方法
checkfields对于您的操作来说,remptyvalue
太复杂了,请尝试执行以下操作:
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);
}
}
你的问题是:
//set listeners
editText1.addTextChangedListener(textWatcher);
editText1.addTextChangedListener(textWatcher);
您没有将textWatcher设置为editText2,因此,如果您在editText1中写入,您总是在检查条件。我知道这很旧,但请记住,只需使用
,isEmpty()
将只允许您添加一个空格,并且按钮将自动启用
使用s1.trim().isEmpty | | s2.trim().isEmpty()
或者,您可以执行以下操作:
String s1=editText1.getText().toString().trim()
字符串s2=editText2.getText().toString().trim()
然后只需检查.isEmpty()
我不知道,不管你想怎么做,这个答案很可能是无关紧要的,但我想我应该指出这一点。另一种方法是
b.setEnabled(!s1.trim().isEmpty() && !s2.trim().isEmpty());
您可以在更短的时间内解决此问题:
@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);
}
我的方式是:
按钮设置已启用(错误)
TextWatcher
来监听文本更改和更新的状态
后文本更改功能中的按钮import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class RegisterActivity extends Activity {
private EditText editText1;
private EditText editText2;
//TextWatcher
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
{
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
checkFieldsForEmptyValues();
}
@Override
public void afterTextChanged(Editable editable) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_activity);
editText1 = (EditText) findViewById(R.id.reg_password);
editText2 = (EditText) findViewById(R.id.reg_password2);
//set listeners
editText1.addTextChangedListener(textWatcher);
editText1.addTextChangedListener(textWatcher);
// run once to disable if empty
checkFieldsForEmptyValues();
TextView loginScreen = (TextView) findViewById(R.id.link_to_login);
loginScreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity (new Intent(getApplicationContext(), DialogActivity.class));
finish();
}
});
}
private void checkFieldsForEmptyValues(){
Button b = (Button) findViewById(R.id.btnRegister);
String s1 = editText1.getText().toString();
String s2 = editText2.getText().toString();
if(s1.equals("") && s2.equals(""))
{
b.setEnabled(false);
}
else if(!s1.equals("")&&s2.equals("")){
b.setEnabled(false);
}
else if(!s2.equals("")&&s1.equals(""))
{
b.setEnabled(false);
}
else
{
b.setEnabled(true);
}
}
}
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);
}
而且他真的应该使用
s1.isEmpty()
nots1.equals(“”
,虽然这是为了性能和清晰度,而不是正确性。我用| |替换了&&但现在整个按钮都处于禁用状态time@Andros建议的方法是最简单的方法。如果需要使用b.setEnabled(!s1.isEmpty()&&!s2.isEmpty()),我也会这样做;另外,PostextChanged可能对您更有效我读了很多次代码,空条件不是最好的,但它还可以,所以问题出在另一个地方:)它在开始时不起作用,我在两个字段中键入它保持禁用状态,然后我必须在字段1中再次键入某物,然后启用它