2010-03-01 3 views
2

Je valide un AlertDialog, et je voudrais lever un Toast au-dessus de l'affichage AlertDialog.Comment lever un toast au-dessus d'un AlertDialog?

Je possède ce code, mais le Toast est affiché sur l'activité

new AlertDialog.Builder(this).setTitle(R.string.contact_groups_add) 
       .setView(addView).setPositiveButton(R.string.ok, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int whichButton) { 

           if (wrapper.getTitle().length()>0) 
           { 
            processAdd(wrapper); 
           } else { 
            Toast.makeText(getApplicationContext(), "Name is required", Toast.LENGTH_SHORT).show(); 
           } 
          } 
         }).setNegativeButton(R.string.cancel, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int whichButton) { 
           // ignore, just dismiss 
          } 
         }).show(); 

Répondre

6

Au lieu d'utiliser AdvertDialog.Builder, vous pouvez créer un custom dialog qui se comporte comme un dialogue, mais est en fait une activité normale . Vos toasts devraient être dessinés normalement en plus de cela.

+0

C'est la meilleure façon de le faire, je ferais imagane, le constructeur AlertDialog construit la boîte de dialogue dans le cadre de l'activité de sorte que le pain grillé apparaît sur l'activité puis, au moins thats ce que je crois arrive –

+0

Ouais ça arrive , n'est donc pas possible de lever au sommet de l'alertdialog? – Pentium10

+1

Je ne pense pas que le AlertDialog.Builder vous donne ce niveau de contrôle. C'est une méthode pratique pour écrire des dialogues simples, si vous avez besoin de quelque chose de plus spécifique, vous écrivez habituellement votre propre activité de dialogue. – seanhodges

3

Avait moi aussi ce problème, quand je voulais montrer un message de validation dans un dialogue. La réponse que seanhodges a donné est probablement la meilleure et la plus propre. Mais une activité séparée n'était pas pratique pour moi, alors j'ai trouvé cette solution.

De toute façon, vous pouvez utiliser AlerDialog.Builder et afficher un toast. Si vous remplacez le OnClickListener du bouton que vous souhaitez déclencher le toast, vous pouvez afficher un toast en haut d'une boîte de dialogue.

Un exemple;

public void showToastOnDialog(final Context context) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Dialog title"); 
    builder.setMessage("Dialog message"); 
    builder.setPositiveButton(android.R.string.ok, new OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // Do nothing, you will be overriding this anyway 
     } 
    }); 
    builder.setNegativeButton(android.R.string.cancel, 
      new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // You can implement code here, because you wont be 
        // overriding this 
       } 
      }); 
    final AlertDialog dialog = builder.create(); 
    // Make sure you show the dialog first before overriding the 
    // OnClickListener 
    dialog.show(); 
    // Notice that I`m not using DialogInterface.OnClicklistener but the 
    // View.OnClickListener 
    dialog.getButton(Dialog.BUTTON_POSITIVE).setOnClickListener(
      new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        Toast toast = Toast.makeText(context, 
          "I`m a toast on top of a dialog.", 
          Toast.LENGTH_LONG); 
        toast.show(); 
        // Because you are overriding the OnClicklistener, the 
        // dialog will not auto dismiss 
        // after clicking 
        dialog.dismiss(); 
       } 
      }); 
} 
+0

cela n'a pas fonctionné pour moi –