2010-09-02 4 views
3

J'ai une boîte de dialogue d'alerte qui contient un bouton. Le bouton est défini dans du code XML et la mise en page est définie à l'aide de Dialog.setContentView().Trouver le parent Dialogue d'un bouton

Le bouton a une classe d'écoute et je veux savoir comment, le cas échéant, je peux accéder à la boîte de dialogue à partir de la méthode onClick (View v).

La raison en est simplement que je veux être en mesure de fermer la boîte de dialogue - donc s'il y a une manière plus facile/meilleure de le faire alors cela serait utile à savoir!

Répondre

1

solution simple en utilisant la méthode onCreateDialog() de la classe Activity:

// member variable 
Dialog mDialog; 

protected Dialog onCreateDialog(int id) { 
    Builder builder = new AlertDialog.Builder(mContext); 
    switch (id) { 
     case DELETE_ALL_DIALOG: 
      builder.setCancelable(false); 
      builder.setPositiveButton(R.string.ok, new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //do what you want 
       } 
      }); 
      builder.setNegativeButton(R.string.cancel, new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dismissDialog(DELETE_ALL_DIALOG); // thats what you are looking for 
       } 
      }); 
      builder.setMessage(R.string.delete_all_bookmarks_question); 
      mDialog = builder.create(); 
      mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      return mDialog; 
     default: 
      return super.onCreateDialog(id); 
    } 
} 
+0

Cela fonctionne mais semble logique inutile quand vraiment la boîte de dialogue devrait être extraite en tant que classe personnalisée si vous me demandez :) – BeRecursive

0

Créer une classe de dialogue personnalisée et définir le bouton là-dedans. Quelque chose comme:

public class CustomizeDialog extends Dialog implements OnClickListener { 
    Button okButton; 

    public CustomizeDialog(Context context) { 
     super(context); 
     /** 'Window.FEATURE_NO_TITLE' - Used to hide the title */ 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     /** Design the dialog in main.xml file */ 
     setContentView(R.layout.main); 
     okButton = (Button) findViewById(R.id.OkButton); 
     okButton.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     /** When OK Button is clicked, dismiss the dialog */ 
     if (v == okButton) 
      dismiss(); 
    } 
+0

Je dois préciser que mon auditeur est actuellement une classe séparée et non une classe interne –

+0

Ensuite, vous ' Je dois passer une référence comme vous l'avez fait. Avez-vous envisagé d'utiliser le AlertDialog.Builder et peut-être d'utiliser setNegativeButton (texte CharSequence, écouteur DialogInterface.OnClickListener) – BeRecursive

0

Pour l'instant j'ai simplement passé une référence à la boîte de dialogue dans la classe d'auditeur, puis appelé rejeter() au moment opportun.

Cela ne semble pas être le meilleur moyen - y at-il un meilleur?

Créer une boîte de dialogue personnalisée ne me semble pas nécessaire ... Elle n'a pas besoin de rien d'extraordinaire.

+0

On dirait que c'est le meilleur moyen si vous ne voulez pas encapsuler le dialogue dans une classe séparée. Devrait être cela ou un dialogue global dans la classe d'activité – BeRecursive

Questions connexes