Is there a way prevent AlertDialog from closing with invalid inputs?

后端 未结 1 727
庸人自扰
庸人自扰 2020-12-16 14:02

I am using a simple text field alert dialog with a positive and a cancel button. I want to validate my alert dialog and prevent the done button from closing the AlertDialog

相关标签:
1条回答
  • 2020-12-16 14:27

    Here's how I did it. Technically, it doesn't technically keep the dialog open, it closes it momentarily and re-opens it, but the net result is the same.

    class MyAlertDialog implements OnDismissListener, OnCancelListener {
        final private EditText editText;
        final private AlertDialog alertDialog;
        final private EventManager eventManager;
        final private CategorySelector categorySelector;
    
        private Boolean canceled;
    
        MyAlertDialog(Context context) {
            editText = new EditText(context);
            alertDialog = buildAlertDialog(context);
            alertDialog.setOnDismissListener(this);
            alertDialog.setOnCancelListener(this);
            show();
        }
    
        private AlertDialog buildAlertDialog(Context context) {
            return new AlertDialog.Builder(context)
            .setTitle(context.getString(R.string.enter_name))
            .setMessage(context.getString(R.string.enter_name))
            .setView(editText)
            .setNeutralButton(context.getString(R.string.save_text), null)
            .setNegativeButton(context.getString(R.string.cancel_text), null)
                .create();
        }
    
        public void show() {
            canceled = false;
            alertDialog.show();
        }
    
        @Override public void onDismiss(DialogInterface dialog) {
            if(!canceled) {
                final String name = editText.getText().toString();
                if(name.equals("")) {
                    editText.setError("Please enter a non-empty name");
                    show();
                } else {
                    doWhateverYouWantHere(name);
                }
            }
        }
    
        @Override public void onCancel(DialogInterface dialog) {
            canceled = true;
        }
    }
    
    0 讨论(0)
提交回复
热议问题