简体   繁体   中英

Desactivate alert dialog positive button on empty string input

I want to enable an alertDialog positive button only when user input is not empty and disable it if user input is empty, a king of toggling for validation purpose, user input must not be empty. here is my code, even if I put a string the button does not activate.

buildInfos.setPositiveButton(android.R.string.ok, new OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        infosDesc = inputInfos.getText().toString();
        Log.i("DESC", infosDesc);
        drawBetween2LastPoints(getAlertColor(alertType), "title", infosDesc);
    }
});

AlertDialog buildInfosDialog = buildInfos.create();
buildInfosDialog.show();
if(infosDesc.isEmpty()){
    buildInfosDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false);
}

In your code above, you only check if the field is empty right after you show the dialog. You'll have to watch the EditText s content for change. For this purpose, you can add a TextWatcher to the field, by using it's addTextChangedListener(TextWatcher) -method .

In the TextWatcher , overwrite the afterTextChanged(Editable) -method, which is called every time the contents of the field change (something was added/removed). In it, check if there is anything in the EditText . If there is, activate the button. If not, deactivate it.

Here is an example Implementation:

public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Button button = new Button(this);
        button.setText("Show Dialog");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog();
            }
        });

        setContentView(button);
    }

    private void showDialog(){
        // Create the field to show in the Dialog:
        final EditText field = new EditText(this);

        // Now create the Dialog itself.
        final AlertDialog dialog = new AlertDialog.Builder(this)
                .setMessage("Enter something")
                .setPositiveButton("O.K.", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(Main.this, "Submitted with \""+field.getText().toString()+"\"",
                                Toast.LENGTH_LONG).show();
                    }
                }).setCancelable(true).setView(field)
                .create();

        // The TextWatcher will look for changes to the Dialogs field.
        field.addTextChangedListener(new TextWatcher() {
            @Override public void beforeTextChanged(CharSequence c, int i, int i2, int i3) {}
            @Override public void onTextChanged(CharSequence c, int i, int i2, int i3) {}

            @Override
            public void afterTextChanged(Editable editable) {
                // Will be called AFTER text has been changed.
                if (editable.toString().length() == 0){
                    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
                } else {
                    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
                }
            }
        });

        // Show the Dialog:
        dialog.show();
        // The button is initially deactivated, as the field is initially empty:
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM