2010-11-18 3 views
0

J'essaie de créer une introduction à mon programme avec un système de message de dialogue utile. Je ne veux pas surcharger l'utilisateur avec trop de texte à la fois, donc je veux diviser mon dialogue en parties. Chaque partie aurait bien sûr son propre message. J'utilise une classe statique distincte pour gérer la livraison de messages et la logique de flux; et ça fonctionne bien. J'utilise également 3 dialogues. Un pour le premier message (puisque vous ne pouvez pas revenir en arrière), un pour le message du milieu et un pour le message final (puisque vous ne pouvez pas aller de l'avant). Je suis capable d'appeler le message du milieu du premier message sans problème. Je suis également capable de revenir au premier message. Mais lorsque j'essaie de rétablir le message du milieu à partir de la boîte de dialogue du message central, la nouvelle boîte de dialogue n'apparaît pas.comment enchaîner (réutiliser immédiatement) le même dialogue

Exemple: Disons que j'ai 4 messages, de sorte que le message milieu devrai apparaître deux fois:

  1. Premier message apparaît: l'utilisateur clique suivant
  2. un message Moyen apparaît: l'utilisateur clique précédent
  3. Le premier message apparaît: l'utilisateur clique sur
  4. Le message du milieu apparaît: l'utilisateur clique sur le suivant
  5. Le message du milieu apparaît: l'utilisateur clique sur
  6. Message final apparaît

Le problème est que je ne reçois pas de dialogue à l'étape 5. J'utilise onPrepareDialog pour réinitialiser les dialogues comme ils sont utilisés. À l'heure actuelle, il s'agit essentiellement d'un clone de onCreateDialog dans lequel chaque cas du commutateur appelle la méthode de construction appropriée pour ce dialogue.

Ceci est le code de ma méthode de dialogue du milieu. (Les 2 autres sont à peu près les mêmes. Vous pouvez deviner ce qu'ils ressemblent à de cela.) J'utilise une boîte de dialogue normale

protected AlertDialog buildMiddleNoticeDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder 
     .setTitle(Notice.getTitle()) 
     .setMessage(Notice.getMessage()) 
     .setCancelable(false) 
     .setNegativeButton(resources.getString(R.string.notice_next_button), 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        showDialog(Notice.next()); 
       } 
      }) 
     .setPositiveButton(resources.getString(R.string.notice_previous_button), 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        showDialog(Notice.previous()); 
       } 
      }); 
    return builder.create(); 
} 

Répondre

3

avec un TextSwitcher à l'intérieur et deux boutons pour aller de l'avant ou vers l'arrière. Le TextSwitcher change simplement le texte et certaines animations sont possibles pour le changement de texte. Essayez ça! La fonctionnalité des deux boutons dépend simplement de la position dans mon tableau de chaînes où tous les messages sont stockés dans des positions ordonnées.

Thats my activité qui est démarré avec un thème de dialogue: http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/activities/TippsAndTricksActivity.java

+0

Cela semble être la solution parfaite. Cependant, chaque fois que j'appelle l'activité thématique de dialogue au début du cycle de vie de l'activité, tout ce qu'elle montre est un écran noir. J'ai même essayé onPostResume et n'ai rien obtenu. Je sais que ce n'est pas la nouvelle activité parce que je l'ai eu à travailler lorsqu'il est déclenché par l'interaction de l'utilisateur. Mais j'en ai besoin pour apparaître avant. (edit) J'ai creusé un peu plus profond et j'ai vu que vous lancez le vôtre à partir d'un bouton. Des suggestions de toute façon? – leetheguy

+1

Nm. C'est en fait un vieux bug connu. Trouvé la réponse ici. http://bit.ly/cFIliJ – leetheguy

Questions connexes