You can definitely post a message to a handler in the OnClick and then show the dialog again when your Handler gets the message...
Jason Proctor wrote: > can't re-show the dialog in onClick(), because it's already shown. at > least that was true with 1.1, i should check it with a later SDK. > > so either i do my validation in onDismiss(), or i get all fancy. > > > >> Just ran a quick test on my code and you're right! Sorry for the >> wrong info. I've been manually calling dismiss() and cancel() on the >> dialogs I use. It's been a while since I looked at that code and >> figured I was doing that because I had to ... now this makes me >> wonder why I did it that way to begin with =P. >> >> But you should still be able to do validation on the OK button being >> clicked, and if that fails, just re-show the dialog. >> >> "as i can't schedule a reappearance of the dialog in the onClick()" >> >> >> Why not? If you define your click handler inline within the activity >> that's using it, you can just call showDialog(ID) in onClick(), no? >> Or does that not work? >> >> ------------------------------------------------------------------------------------------------- >> TreKing - Chicago transit tracking app for Android-powered devices >> <http://sites.google.com/site/rezmobileapps/treking>http://sites.google.com/site/rezmobileapps/treking >> >> On Fri, Nov 20, 2009 at 1:20 PM, Jason Proctor >> <<mailto:jason.android.li...@gmail.com>jason.android.li...@gmail.com> >> wrote: >> >> thanks for the response, most helpful. >> >> i don't actively dismiss the dialog at any point, therefore something >> behind the button click must be doing it. i took a look in >> android.internal.app.AlertController.java, and found that its click >> listener calls the appropriate button handler, then sends a dismiss >> message to the dialog. unless i'm missing something big, seems fairly >> conclusive. >> >> so the reasons why i do it this convoluted way are coming back to me. >> due to the auto-dismiss, i have to validate in the dismiss handler, >> as i can't schedule a reappearance of the dialog in the onClick(). >> >> i suppose i'll have to get all fancy and do the validation key by key, then. >> >> (the point remains that Android has the weirdest modal dialog >> handling of any environment i've encountered!) >> >> thanks, >> J >> >> >> >> >>> "when the dismiss listener fires, can i tell which button caused >>> the dismiss?" >>> >>> No - I don't think any of the buttons by default cause the dialog to >>> be dismissed. This happens when you call dismiss() or cancel() on >>> the dialog or the user presses the back button. >>> >>> "so in the click listener, i set a member flag according to which >>> button was clicked. then in the dismiss listener, i then check the >>> flag to see whether to proceed or not" >>> >>> But you have set on click listeners for each of the two buttons you >>> have, no? So why not handle their actions in their respective click >>> listeners? What are you doing in each of those listeners (I'm going >>> to bet you're dismissing the dialog after storing the flag...)? >>> >>> "the other issue i have with Android's dialogs is that if the >>> contents fail validation and the dialog needs to be re-presented, i >>> have to re-show it in the dismiss listener" >>> >>> No, you don't have to do this. In your listener for the OK button >>> you can get the text field, validate it, and if it fails show a >>> toast message, and don't dismiss the dialog. If it succeeds, do what >>> you need to with the entered data and THEN call dismiss() on the >>> dialog. >>> >>> If you want to get fancy you can also validate the user data as they >>> type and disable and enable the OK button in response so they can >>> only hit OK when they've entered valid data. >>> >>> Also, I highly doubt you need the dismiss listener in your case. >>> Hope that helps. >>> >>> ------------------------------------------------------------------------------------------------- >>> TreKing - Chicago transit tracking app for Android-powered devices >>> >> >> ><<http://sites.google.com/site/rezmobileapps/treking>http://sites.google.com/site/rezmobileapps/treking><http://sites.google.com/site/rezmobileapps/treking>http://sites.google.com/site/rezmobileapps/treking >> >> > >> >>> On Thu, Nov 19, 2009 at 8:00 PM, Jason Proctor >>> >> >> ><<mailto:<mailto:jason.android.li...@gmail.com>jason.android.li...@gmail.com><mailto:jason.android.li...@gmail.com>jason.android.li...@gmail.com> >> >> >wrote: >> >>> i never look forward to handling Android dialogs, maybe someone can >>> point me to a better way of doing it than i'm doing right now. >>> >>> say i have a dialog which has one text field in it, and OK and Cancel >>> buttons. i make the dialog with AlertDialog.Builder, and set click >>> listeners on the buttons and dismiss listener on the dialog. >>> >>> when the dismiss listener fires, can i tell which button caused the >>> dismiss? i don't see how, so in the click listener, i set a member >>> flag according to which button was clicked. then in the dismiss >>> listener, i then check the flag to see whether to proceed or not. a >>> rather backward process. am i missing something? >>> >>> the other issue i have with Android's dialogs is that if the contents >>> fail validation and the dialog needs to be re-presented, i have to >>> re-show it in the dismiss listener. in every other environment known >>> to man, dialogs are (somewhat) modal, so the dialog stays up unless >>> expressly dismissed by code. IMHO, the latter makes more sense. >>> >>> thanks for any help with this stuff, >>> -- >>> jason.vp.engineering.particle >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Android Developers" group. >>> To post to this group, send email to >>> >> >> ><mailto:<mailto:android-developers@googlegroups.com>android-developers@googlegroups.com><mailto:android-developers@googlegroups.com>android-developers@googlegroups.com >> >> >To unsubscribe from this group, send email to >> >> >> ><mailto:<mailto:android-developers%252bunsubscr...@googlegroups.com>android-developers%2bunsubscr...@googlegroups.com><mailto:android-developers%2bunsubscr...@googlegroups.com>android-developers+unsubscr...@googlegroups.com >> >> >For more options, visit this group at >> >> >> ><<http://groups.google.com/group/android-developers?hl=en>http://groups.google.com/group/android-developers?hl=en><http://groups.google.com/group/android-developers?hl=en>http://groups.google.com/group/android-developers?hl=en >> >> > >> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Android Developers" group. >>> To post to this group, send email to >>> <mailto:android-developers@googlegroups.com>android-developers@googlegroups.com >>> To unsubscribe from this group, send email to >>> <mailto:android-developers%2bunsubscr...@googlegroups.com>android-developers+unsubscr...@googlegroups.com >>> For more options, visit this group at >>> >> >> ><<http://groups.google.com/group/android-developers?hl=en>http://groups.google.com/group/android-developers?hl=en><http://groups.google.com/group/android-developers?hl=en>http://groups.google.com/group/android-developers?hl=en >> >> >> -- >> >> jason.vp.engineering.particle >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to >> <mailto:android-developers@googlegroups.com>android-developers@googlegroups.com >> To unsubscribe from this group, send email to >> <mailto:android-developers%2bunsubscr...@googlegroups.com>android-developers+unsubscr...@googlegroups.com >> For more options, visit this group at >> <http://groups.google.com/group/android-developers?hl=en>http://groups.google.com/group/android-developers?hl=en >> >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to android-developers@googlegroups.com >> To unsubscribe from this group, send email to >> android-developers+unsubscr...@googlegroups.com >> For more options, visit this group at >> <http://groups.google.com/group/android-developers?hl=en>http://groups.google.com/group/android-developers?hl=en >> > > > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en