Question

J'ai créé un AlertDialog pour montrer à l'utilisateur le prochain niveau de difficulté, le cas échéant. Donc, le code correspondant est comme ça. lorsque le jeu est réussi, showDialog (R.id.display_success) est appelé et le code suivant est exécuté.

Donc, je compte exécuter ce code à chaque appel. Toutefois; le jeu ne s'exécute qu'une fois et affiche le même AlertDialog à chaque exécution. Je veux dire, comme si l’instance n’était pas créée après la création de la première et que la première instance était utilisée tout le temps.

case R.id.display_success:           
       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) {
                     finish();
               }
       })
       .create();
Était-ce utile?

La solution 2

La méthode onPrepareDialog est appelée lorsque la boîte de dialogue est affichée. Il est donc préférable de modifier le texte ou d’autres fonctionnalités en remplaçant cette méthode.

Autres conseils

Je pense avoir un correctif pour le comportement incohérent de onPrepareDialog. Lors de la création initiale de la boîte de dialogue (lorsqu'il s'agit encore d'un AlertDialog.Builder), vous devez définir le message sur un état initial (non nul) ou onPrepareDialog n'écrase PAS le message avec la valeur souhaitée. Ainsi, lorsque vous créez la boîte de dialogue, procédez comme ceci pour que le message ait toujours une valeur non nulle. J'ai eu du mal à résoudre ce problème pendant des jours et j'ai trouvé cette solution par accident:

AlertDialog.Builder resultAlert = new AlertDialog.Builder(context);

if ( message == null ) {
    resultAlert.setMessage("");
} else {
    resultAlert.setMessage(message);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top