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.
Use TextChangedListener and initially disable ImageButton in onCreate().
Add a TextWatcher to your EditText, so that when you change the text inside it, you Button enables or disables itself. Initally in onCreate () disable the button. Then add a addTextChangedListener to the edit text. within that check the edittext length and disable if it is 0 or otherwise enable it
JTextField is a component that allows modifying a single line of text. In this tutorial we are going to see how to disable JButton when JTextField is empty by using DocumentListener interface with removeUpdate (), insertUpdate () and changedUpdate () methods which is triggered when inserting, deleting, or modifying text in JTextField.
Initally in onCreate () disable the button. Then add a addTextChangedListener to the edit text. within that check the edittext length and disable if it is 0 or otherwise enable it If you want to use an object oriented solution and reuse your code
When using AngularJS Form validation, the $invalid property can be used to disable the Submit Button when Form is not filled (empty) i.e. the INPUT Text Fields (TextBoxes) have invalid data. The below HTML Markup consists of an HTML DIV to which ng-app and ng-controller AngularJS directives have been assigned.
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
I know this is old, but keep in mind that by simply using .isEmpty()
will allow you to only add a space and the button will enable itself.
Use s1.trim().isEmpty || s2.trim().isEmpty()
instead.
Or, you can do:
String s1 = editText1.getText().toString().trim()
String s2 = editText2.getText().toString().trim()
then just check for .isEmpty()
.
I don't know, it's however you'd want to do it, and this answer is most likely irrelevant anyway but I'd thought I'd just point that out.
You method checkFieldsForEmptyValues
is too complicated for what your doing, try just by doing :
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);
}
}
A different way to do this would be
b.setEnabled(!s1.trim().isEmpty() && !s2.trim().isEmpty());
You may resolve this problem a much shorter:
@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 you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With