views:

846

answers:

1

Today I faced a very weird problem. In my game I create AlertDialog to show the user next level challenges when one is succeeded. So, the corresponding code is like this. when the game is succeeded showDialog(R.id.display_success) is called and the following code is executed.

So, I am expecting to execute this code in every call. However; the game is executing only once and showing the same AlertDialog in every other execution. I mean, like the instance is not created after the first one is created and the first instance is used all the time. I hope I was able to describe my problem. Thank you.

case R.id.display_success:
       Log.d("GfxMasterShot::onCreateDialog", "Succcess " + Integer.toString(SMBGuesstheNumber.nCurrentLevel));
       updateGameSettings();
       message = formatLevel()
       + formatMission();
       return new AlertDialog.Builder(this)
       .setIcon(R.drawable.smiley_happy)
       .setTitle(R.string.dialog_success)
       .setMessage(message)
       .setPositiveButton(R.string.alert_dialog_newgame, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog,     int whichButton) {
                       StartaNewGame();
               }
       })
       .setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int whichButton) {
                       CtrlMaintanence.getInstance().setCurrentLevel(SMBGuesstheNumber.nCurrentLevel + 1);
                       finish();
               }
       })
       .create();
+2  A: 

http://code.google.com/p/android/issues/detail?id=857

This problem is because of a bug in the super class Dialog as you can see in the link. Once I called removeDialog before I call showDialog in my code, the problem is completely solved. So, it is advised to remove the Dialog before calling showDialog like this:

removeDialog(R.id.display_success);
showDialog(R.id.display_success);
Omer