Hi guys, I think there's a bug in either showDialog, dismissDialog or showing/dismissing a ProgressDialog using these 2 methods, which might or might not be related to the fact that I'm displaying the dialog from another thread (marshalled correctly via runOnUiThread).
Here's what I do: I have a UI thread with a SurfaceView, and another thread which is doing something asynchronously and needs to show progress. So, let's say I have these methods on my view, which are accessed by the background thread: // BEGIN CODE private static final int PROGRESS_DIALOG_ID = 888; private String mProgressMessage; void showProgress(final String message) { mProgressMessage = message; mActivity.runOnUiThread(new Runnable() { public final void run() { System.out.println("DIALOG " + PROGRESS_DIALOG_ID + ": about to display: " + message); mActivity.showDialog(PROGRESS_DIALOG_ID); } }); } and void hideProgress() { mActivity.runOnUiThread(new Runnable() { public final void run() { mActivity.dismissDialog(PROGRESS_DIALOG_ID); System.out.println("DIALOG " + PROGRESS_DIALOG_ID + ": dismissed"); } }); } Here's the implementation of onCreate/onPrepareDialog in my activity: @Override protected Dialog onCreateDialog(int id) { if (id == PROGRESS_DIALOG_ID) { System.out.println("DIALOG " + id + ": onCreateDialog called"); mProgressDialog = new ProgressDialog(this); // setXxx, setYyy... mProgressDialog.setMessage(mProgressMessage); return mProgressDialog; } return super.onCreateDialog(id); } @Override protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(id, dialog); if (id == PROGRESS_DIALOG_ID) { ((ProgressDialog)dialog).setMessage(mProgressMessage); System.out.println("DIALOG " + id + ": prepared with message: " + mProgressMessage); } } // END CODE So, in my background thread, I call showProgress("Some message"), do some work, and then call hideProgress() - this works, and the output is: DIALOG 888: about to display: Some message DIALOG 888: onCreateDialog called DIALOG 888: prepared with message: Some message DIALOG 888: dismissed But most importantly is that the dialog is indeed displayed. Then, I chose an item from my menu, which makes the background thread do some more work, and again it calls: showProgress("Blah"), does some work, and then hideProgress - according to the log all is good: DIALOG 888: about to display: Blah // onCreateDialog is NOT called, which is what's expected, the dialog is cached DIALOG 888: prepared with message: Blah DIALOG 888: dismissed *EXCEPT* that the dialog is *NOT DISPLAYED* at all. Now, this *IS* a bug and I'm pretty sure it's not mine too. I *know* that, because even if I create the dialog and then *remove* it, and then try to show another dialog (newly created, and even with a different id!) it won't work either. Has anyone experienced that and does anyone knows if there's a workaround for this no matter how pervert it might be. Thanks, Stoyan --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---