编辑文本字段为空时禁用button

我有两个文本字段和一个button。 我想要禁用button,除非两个EditText字段都不是空的。 我在这里尝试了很多解决scheme在stackoverflow,但他们不工作。 这是我的代码:

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

如果我开始活动,它被禁用。 但是,如果我input的东西,它有时启用,有时不..我只是想启用button,如果两个编辑文本字段不为空。

Solutions Collecting From Web of "编辑文本字段为空时禁用button"

你的问题在这里:

 //set listeners editText1.addTextChangedListener(textWatcher); editText1.addTextChangedListener(textWatcher); 

您没有将textWatcher设置为editText2,所以如果您在editText1内写入,则始终检查条件

我知道这是旧的,但请记住,通过简单地使用.isEmpty()将允许您只能添加一个空间,button将启用自己。

使用s1.trim().isEmpty || s2.trim().isEmpty() s1.trim().isEmpty || s2.trim().isEmpty()代替。

或者,你可以这样做:

String s1 = editText1.getText().toString().trim() String s2 = editText2.getText().toString().trim()

然后检查.isEmpty()

我不知道,但是这是你想要做的,而且这个答案很可能无关紧要,但我想我只是指出了这一点。

你的方法checkFieldsForEmptyValues对于你所做的事情来说太复杂了,试试看:

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

不同的方式来做到这一点将是

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

}

 private void updateSignInButtonState() { buttonSignIn.setEnabled(editLogin.getText().length() > 0 && editPassword.getText().length() > 0); } 

而不是这个

  if(s1.equals("") && s2.equals("")) { b.setEnabled(false); } 

尝试这个

  if(s1.isEmpty() || s2.isEmpty()) { b.setEnabled(false); } 

将&& this的所有validation条件都更改为||

我的方法是:

  1. button setEnabled(false)

  2. 我使用TextWatcher来侦听文本更改并更新afterTextChanged函数中button的状态

这是我的代码:

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