Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 307
androidBeginner Avatar asked Dec 19 '13 13:12

androidBeginner


People also ask

How do I disable the button if EditText is empty Kotlin?

Use TextChangedListener and initially disable ImageButton in onCreate().

How to enable/disable edit text button on edit text?

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

How to disable JButton when jtextfield is empty in JTable?

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.

How to disable the text length of a button?

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

How to disable the submit button when form is not filled?

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.


Video Answer


5 Answers

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

like image 139
noni Avatar answered Oct 12 '22 09:10

noni


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.

like image 45
BrandonBrown Avatar answered Oct 12 '22 07:10

BrandonBrown


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

}
like image 21
Andros Avatar answered Oct 12 '22 08:10

Andros


A different way to do this would be

b.setEnabled(!s1.trim().isEmpty() && !s2.trim().isEmpty());
like image 3
codeMagic Avatar answered Oct 12 '22 08:10

codeMagic


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);
}
like image 3
lovesuper Avatar answered Oct 12 '22 09:10

lovesuper