2010-01-27 9 views
3

/* J'ai un problème bizarre, dans OnMenuItemClickListener, j'appelle un dialogue d'alerte que j'ai fait, mais il semble que, quand j'appelle le dialogue d'alerte, il ne le montre pas juste après OnMenuItemClick terminé. qu'est-ce que je fais? */Boîte de dialogue d'alerte en retard

class MyListMenuListener implements OnMenuItemClickListener 
    { 

     private String TAG; 

     @Override 
     public boolean onMenuItemClick(MenuItem item) 
     { 
      if (item.getItemId() == saveRoute.getItemId()) 
      {     
       alertDialogSaveFile(); 
       //nameInput = "testone.txt"; 
       //some operations 
//          ... 
//          return true; 
      } 

// ...

/*the wierd thing is that the alert dialog doesnt show up on the same moment i call it.. 
only after the onMenuItemClick operation ends (with return) 
and this is how my alertdialog looks like:*/ 

     private void alertDialogSaveFile() 
{ 

AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     alert.setTitle("Save your current map"); 
     alert.setMessage("Please insert name for this route"); 
     final EditText saveNameInput = new EditText(TwittListActivity.this); 

     alert.setView(saveNameInput); 
     alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int whichButton) 
      { 
       nameInput = saveNameInput.getText().toString(); 
      } 
     }); 

     alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int whichButton) 
      { 
      } 
     }); 
     AlertDialog ad = alert.create(); 
     ad.show(); 
    } 


//Thanks! 
//ray. 
+0

Je comprends ce que vous dites, mais ce n'est pas tout à fait logique de le faire, et pas un codage «soigné», ne pourrait pas être autrement, puis pousser tout dans l'okClick? – rayman

Répondre

3

Dialogs dans Android ne sont pas synchrones, il est donc très probable que le thread d'interface utilisateur termine onMenuItemClick() avant de créer/afficher votre boîte de dialogue (les dialogues sont géré par l'activité englobante).

Modifier: J'ai mal compris une partie de votre question. Gardez l'appel à alertDialogSaveFile() où il est et placez le code qui enregistre réellement le fichier dans le gestionnaire onClick(). Étant donné que les boîtes de dialogue dans Android ne sont pas synchrones, vous devez effectuer l'action de sauvegarde dans le rappel de dialogue lui-même. Il n'est pas possible d'afficher une boîte de dialogue, d'attendre que l'utilisateur réponde et d'obtenir le résultat de la boîte de dialogue.

Questions connexes