Aller au contenu

Problème de Dialog


Jesmar

Recommended Posts

hello :)

j'aimerais créer un Dialog plus ou moins comme dans l'ex ici http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog

il doit s'afficher dans le menu qui s'affiche en bas de l'écran

pb : lorsque je le lance, ça crash

l'AlertDialog pour quitter fonctionne bien mais le Dialog pour le about crash

idea ?

   public boolean onCreateOptionsMenu(Menu menu)
   {
       menu.add(0, MENU_ABOUT, 0, "À propos");
       menu.add(0, MENU_QUIT, 0, "Quitter");
       return true;
   }

   public boolean onOptionsItemSelected(MenuItem item)
   {
       switch(item.getItemId())
       {
           case MENU_ABOUT :
               menuBottomAbout();
               return true;
           case MENU_QUIT :
               menuBottomQuit();
               return true;
       }
       return false;
   }

   public void menuBottomAbout()
   {
       Context mContext = getApplicationContext();
       Dialog dialog = new Dialog(mContext);

       dialog.setContentView(R.layout.about);
       dialog.setTitle("À propos");

       /*TextView text = (TextView)dialog.findViewById(R.id.aboutText);
       text.setText("Hello, this is a custom dialog!");*/
       /*ImageView image = (ImageView)dialog.findViewById(R.id.aboutImage);
       image.setImageResource(R.drawable.icon);*/

       dialog.show();
   }

   public void menuBottomQuit()
   {
       AlertDialog.Builder builder = new AlertDialog.Builder(this);
       builder.setMessage("Êtes-vous sûr de vouloir quitter ?")
              .setCancelable(false)
              .setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int id) {
                       Yark.this.finish();
                  }
              })
              .setNegativeButton("Non", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int id) {
                       dialog.cancel();
                  }
              });
       AlertDialog alert = builder.create();
       alert.show();
   }

Lien vers le commentaire
Partager sur d’autres sites

Je ne suis sûr de rien mais essaye peut être d'utiliser ce qui est explicité plus haut onCreateDialog .... je précise bien que c'est une idée, je ne sais pas si ça va aider....

static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;

protected Dialog onCreateDialog(int id) {
   Dialog dialog;
   switch(id) {
   case DIALOG_PAUSED_ID:
       // La création de la fenêtre ABOUT
       break;
   case DIALOG_GAMEOVER_ID:
       // La création de la fenêtre QUITTER
       break;
   default:
       dialog = null;
   }
   return dialog;
}

Et après tu n'as plus qu'à appeller tes dialog de cette manière.... ?

showDialog(DIALOG_PAUSED_ID);

Lien vers le commentaire
Partager sur d’autres sites

j'ai modifié le code pour mettre le showDialog et le onCreateDialog

résultat : la même chose, le about plante et le quit fonctionne

vu que j'ai le même résultat, je suppose que l'erreur proviendrait du code où je crée le dialog (dans onCreateDialog) mais je vois pas où est l'erreur

constantes

   private static final int MENU_ABOUT = 1;
   private static final int MENU_QUIT = 2;
   private static final int DIALOG_ABOUT = 1;
   private static final int DIALOG_QUIT = 2;

je crée les menus

   public boolean onCreateOptionsMenu(Menu menu)
   {
       menu.add(0, MENU_ABOUT, 0, "À propos");
       menu.add(0, MENU_QUIT, 0, "Quitter");
       return true;
   }

j'appelle mes fonctions pour chaque menu

   public boolean onOptionsItemSelected(MenuItem item)
   {
       switch(item.getItemId())
       {
           case MENU_ABOUT :
               menuBottomAbout();
               return true;
           case MENU_QUIT :
               menuBottomQuit();
               return true;
       }
       return false;
   }

le menu about et quit où j'appelle ces showDialog

   public void menuBottomAbout()
   {
       showDialog(1);
   }

   public void menuBottomQuit()
   {
       showDialog(2);
   }

et enfin le onCreateDialog où je met la création de mes 2 boites de dialogue

   protected Dialog onCreateDialog(int id)
   {
       switch(id)
       {
           case DIALOG_ABOUT :
               Context mContext = getApplicationContext();
               Dialog dialog = new Dialog(mContext);

               dialog.setContentView(R.layout.about);
               dialog.setTitle("À propos");

               TextView text = (TextView)dialog.findViewById(R.id.aboutText);
               text.setText("Hello, this is a custom dialog!");
               /*ImageView image = (ImageView)dialog.findViewById(R.id.aboutImage);
               image.setImageResource(R.drawable.icon);*/
               return dialog;
           case DIALOG_QUIT :
               AlertDialog.Builder builder = new AlertDialog.Builder(this);
               builder.setMessage("Êtes-vous sûr de vouloir quitter ?")
                      .setCancelable(false)
                      .setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                               Yark.this.finish();
                          }
                      })
                      .setNegativeButton("Non", new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                               dialog.cancel();
                          }
                      });
               AlertDialog alert = builder.create();
               return alert;
           default:
               return null;
       }
   }

Lien vers le commentaire
Partager sur d’autres sites

Peux-tu poster la trace des erreurs?

EDIT: Je croyais que c'était le même type, en fait un coup tu utilises AlertDialog et un autre Dialog oki ... ça viendrait donc du Dialog ... bon je sais pas trop en fait, j'utilise tout le temps AlertDialog.

Lien vers le commentaire
Partager sur d’autres sites

Ce serait beaucoup plus simple si tu indiquais le message qui est indiqué dans le logcat, quand ca plante. C'est là que sera indiqué la cause du crash.

Comme ca, je ne vois pas trop ce qui pourrait ne pas aller. Tu es sur que ton R.layout.about est correct ?

Emmanuel / Alocaly

Lien vers le commentaire
Partager sur d’autres sites

juste à titre d'essai, j'ai remplacé mon Dialog par un AlertDialog et là les deux marchent (au pire, je ferais ça)

mon R.layout.about est bon

par contre, on trouve où le logcat (ou la trace des erreurs) ?

Lien vers le commentaire
Partager sur d’autres sites

En fait ta méthode aurait pu marcher, mais tu aurais du regarder ce que fait le builder de l'AlertDialog :)

Tout simplement l'Activité que tu renvoie en créant ton Dialog ne possède pas toutes les propriétés suffisantes pour être instanciée au sein de ton Activité...

D'où l'intérêt de se faire un petit package ou une lib avec ses propres Dialog qui implémentent tout qui va bien ;)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...