Intereting Posts

Отключить кнопку при изменении текстовых полей

У меня есть два текстовых поля и кнопка. Я хочу отключить Button, если оба 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.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); } } } 

Если я начну свою деятельность, она будет отключена. Но если я что-то печатаю, иногда он позволяет, а иногда и нет. Я просто хочу включить кнопку, если оба поля Edit-Text не пусты.

Solutions Collecting From Web of "Отключить кнопку при изменении текстовых полей"

Ваша проблема здесь:

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

Вы не устанавливаете textWatcher в editText2, поэтому вы всегда проверяете условие, если вы пишете внутри editText1

Я знаю, что это старо, но имейте в виду, что просто используя .isEmpty() позволит вам только добавить пробел, и кнопка сама включится.

Используйте 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); } 

Измените все условия проверки от && на ||