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
Post a Comment