androidBeginner androidBeginner -3 years ago 117
Android Question

Disable Button when Edit Text Fields empty

I have two text fields and a Button. I want to disable the Button unless both EditText-Fields are not empty. I tried many solutions here at stackoverflow, but they don't work. Here is my code:

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


If I start the activity, it is disabled. But If I type something, it sometimes enables and sometimes doesn't.. I just want to enable the button if both Edit-Text Fields are not empty.

Answer Source

Your problem is here:

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

You are not setting the textWatcher to editText2, so you are always checking the condition if you write inside editText1

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download