web-dev-qa-db-fra.com

Android dialoginterface obtenir des vues de dialogue internes

J'ai un programme simple pour afficher un dialogue, avec une vue edittext, et écouter des boutons positifs/négatifs, pour exécuter une action personnalisée dans chacun (lisez cet edittext et enregistrez son contenu dans une variable d'activité).

Le problème survient lorsque je ne vois aucun moyen de récupérer mon dialogue actuel à partir de l'interface de dialogue (et ensuite, je ne peux récupérer aucune vue dans le dialogue).

C'est probablement une question de noob, mais après quelques recherches sur Google, je n'ai pas une réponse à cela.

Mon code est le suivant

LayoutInflater li = LayoutInflater.from(this);
View myView = li.inflate(R.layout.my_layout, null);

AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new   DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
    //here the code to retrieve dialog
  }
});
cDialog.create();

Toute idée sur où puis-je trouver cela?

29
user1220817

Vous pouvez récupérer les vues depuis la Dialog dans la onClick() avec:

EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view);
71
Luksprog

Cette manière fonctionne parfaitement dans mon code: 

public void onClick(DialogInterface dialog, int which) {

   Dialog dialog2 =Dialog.class.cast(dialog);
   EditText edit = (EditText) dialog2.findViewById(R.id.myedittext);

}

à votre santé

13
user23

Vous avez déjà une référence à la vue contenant le texte modifié. Pourquoi ne pas l'utiliser directement? Assurez-vous simplement de rendre la vue finale afin de pouvoir y accéder dans la classe OnClickListener anonymous.

LayoutInflater li = LayoutInflater.from(this);
final View myView = li.inflate(R.layout.my_layout, null);
// don't forget to mark myView as final

AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new   DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
    //here the code to retrieve dialog
    EditText edit = (EditText) myView.findViewById(R.id.the_id_of_view);
  }
});
cDialog.create();
9
Aniket Thakur

Vous pouvez obtenir le dialogue renvoyé par la méthode show() alertBuidler.

AlertDialog.Builder adb = new AlertDialog.Builder(YourActivity.this);
//...code to add methods setPositive an setNegative buttons

Appelez la méthode show() de adb et obtenez Dialog comme ci-dessous:

final AlertDialog dialog = adb.show();

Vous pouvez donc appeler n’importe quel bouton de votre boîte de dialogue à n’importe quel point de code de votre activité:

dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick();
0
Romeryto