2010-05-13 7 views
9

J'essaie de créer une boîte de dialogue personnalisée pour afficher une vue dans cette boîte de dialogue. Ce code est le constructeur:Ignorer une boîte de dialogue personnalisée?

//Getting the layout 
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
View layout = inflater.inflate(R.layout.custom_dialog_simple, 
           (ViewGroup) findViewById(R.id.rlDialogSimple)); 

//Change Text and on click 
TextView tvDialogSimple = (TextView) layout.findViewById(R.id.tvDialogSimple); 
tvDialogSimple.setText(R.string.avisoComprobar); 
Button btDialogSimple = (Button) layout.findViewById(R.id.btDialogSimple); 
btDialogSimple.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     //Do some stuff 

     //Here i want to close the dialog 
    } 
}); 

AlertDialog.Builder builder = new AlertDialog.Builder(AcPanelEditor.this); 
builder.setView(layout); 
AlertDialog alert = builder.create(); 
alert.show(); 

Donc, je veux rejeter la boîte de dialogue dans le onClick de btDialogSimple. Comment je peux le faire? Je ne sais pas comment appeler la méthode de rejet à l'intérieur d'un onclicklistener.

Mes boutons ont une disposition personnalisée, donc je ne veux pas créer de builder.setPositiveButton.

Des idées?

+0

Bonne question! C'est exactement la façon dont * semble * que cela devrait fonctionner. Mais bien sûr, ce n'est pas si simple. (pas la façon Android). –

Répondre

16

Vous devez enregistrer le AlertDialog à votre propriété de classe parent, utilisez quelque chose comme ceci:

class parentClass ........ { 
private AlertDialog alert=null; 
........ 
public void onClick(View v) { 
     //Do some stuff 

     //Here i want to close the dialog 
     if (parentClass.this.alert!=null)    
     parentClass.this.alert.dismiss(); 
    } 
........ 
this.alert = builder.create(); 
this.alert.show(); 

}

+0

Cela a fonctionné, merci! – YaW

+0

Merci beaucoup !!! – davs

+0

Fonctionne pour moi aussi. Mais comme j'ai une boîte de dialogue personnalisée construite en tant que fichier xml, je n'ai pas besoin de la construire, utilisez simplement setContentView (custom_dialog). –

7

Je pense qu'une meilleure façon peut-être appeler

dismissDialog(DIALOG_ID); 

Est-ce que faire de la classe AlertDialog une propriété de classe ne rendrait pas le but de renvoyer un dialogue à partir de onCreateDialog()?

+2

Comment cela fonctionne-t-il avec une boîte de dialogue ** personnalisée **? –

0

Je utilise

public Dialog dialog; 

buton_sil.setOnClickListener(new View.OnClickListener() { 

      @ Override 
      public void onClick(View v) { 

        DialogClose(); 
        } 
}): 


public void DialogClose() { 
     dialog.dismiss(); 
    } 
0

Utilisez AlertDialog par exemple par exemple mAlertDialog en tant que variable globale. Et appelez mAlertDialog.dismiss(); à l'intérieur onClick()

Questions connexes