User-friendly display of validation errors in Android dialogs -


i have dialog fragment several input control elements. when user enters invalid value field, dialog box b validation error message pops up.

the problem when dismiss dialog b, dialog not visible. not user-friendly - if dialog box has 10 values , user entered correct values 9 of them, in case of validation error he/she has re-enter 9 correct values again.

both , b implemented using alertdialog.

how can implement display of validation error messages such user can return dialog a, correct wrong values , press ok button again?

this kludge-y, i've managed working me. way this, show validation errors on alert dialog (and prevent dialog being dismissed) override onclicklistener dialog button. may thinking "i'm doing that... jerk", that's trick. you're calling alertdialog.builder().settitle().setview().setpositivebutton(title, new onclicklistener() {...validation logic...}).create(); , returning that. if want prevent dialog being dismissed, need add onshowlistener dialog(after it's been created) , override button click there. here's example:

way doesn't work:

    alertdialog.builder builder = new alertdialog.builder(getactivity());     builder.settitle("dialog example").setpositivebutton(android.r.string.ok, new dialog.onclicklistener() {         @override         public void onclick(dialoginterface dialog, int which) {             // validation logic             if (!valid) {                 myedittext.seterror(r.string.invalid_value); //             } else {                 dialog.dismiss();             }         }     });      dialog dialog = builder.create();     // show dialog, or return it, whatever you're going 

so above doesn't work because onclicklistener called before default 1 is, dismiss dialog. here's 1 way around it:

    alertdialog.builder builder = new alertdialog.builder(getactivity());     builder.settitle("dialog example").setpositivebutton(android.r.string.ok, null);      dialog dialog = builder.create(); dialog.setonshowlistener(new onshowlistener() {      @override     public void onshow(dialoginterface dialog) {         ((alertdialog)dialog).getbutton(dialoginterface.button_positive).setonclicklistener(new onclicklistener() {         public void onclick(view v) {             // validation logic             if (!valid) {                 myedittext.seterror(r.string.invalid_value); //             } else {                 dialog.dismiss();             }         }     } }); 

just remember, you're responsible dismissing it!


Comments

Popular posts from this blog

php - Why I am getting the Error "Commands out of sync; you can't run this command now" -

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -