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?
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);
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é
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();
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();