Comment sélectionner une entrée dans AlertDialog avec choix unique case android?
J'ai une boîte de dialogue d'alerte avec une simple liste de choix et de deux boutons: un OK
bouton et un cancel
bouton. Le code ci-dessous montrent comment j'ai mis en place il.
private final Dialog createListFile(final String[] fileList) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Compare with:");
builder.setSingleChoiceItems(fileList, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Log.d(TAG,"The wrong button was tapped: " + fileList[whichButton]);
}
});
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {}
});
return builder.create();
}
Mon but est d'obtenir le nom de la radio sélectionnée bouton lorsque la OK
bouton est actionné. J'ai essayé de sauver la chaîne dans une variable, mais à l'intérieur d'un intérieur de classe, il est possible d'accéder à la finale uniquement des variables. Est-il un moyen d'éviter d'utiliser une dernière variable pour stocker le bouton d'option sélectionné?
Vous devez vous connecter pour publier un commentaire.
À l'aide d'une variable finale de toute évidence ne fonctionne pas (car il ne peut être attribué qu'une seule fois, au moment de la déclaration). Dite "globale", les variables sont habituellement une odeur de code (surtout quand elles deviennent le cadre d'une Activité de classe, qui est habituellement l'endroit où AlertDialogs sont créés).
La solution de nettoyage est de jeter les DialogInterface objet d'une AlertDialog et ensuite appeler getListView().getCheckedItemPosition(). Comme ceci:
android.R.string.ok
pour votreR.string.ok_button_label
Ce qui a été répondu, mais je continue de trouver cette réponse de Google et je voulais partager un non-classe anonyme solution. Je préfère des classes réutilisables moi-même et peut être utile à d'autres.
Dans cet exemple, j'utilise un
DialogFragment
la mise en œuvre et de la récupération d'une valeur par l'intermédiaire d'un rappel méthode.La rappel méthode pour obtenir les valeurs à partir d'un Dialogue peut être fait par la création d'un public interface
Également la
DialogFragment
implémenteDialogInterface.OnClickListener
qui signifie que vous pouvez enregistrer la classe que vous avez mis en œuvre comme la OnClickListener pour laDialogFragment
qui est en cours de création.Par exemple
La ligne
builder.setSingleChoiceItems(mResourceArray, mSelectedIndex, this);
Crée un choix de dialogue avec les options à partir d'un ressources tableau stockées dans mResourceArray. Cette présélectionne également une option d'index à partir de ce qui est stocké dans mSelectedIndex et enfin, il définit
this
lui-même comme le OnClickListener. (Voir le code complet à la fin si ce paragraphe est un peu déroutant)Maintenant, le OnClick méthode est l'endroit où vous prenez la valeur qui vient de la boîte de dialogue
Ce qui se passe ici, c'est quand un élément est sélectionné, il est stocké dans une variable. Si l'utilisateur clique sur le Annuler bouton, pas de mise à jour est envoyé en arrière et rien ne change. Si l'utilisateur clique sur le bouton OK, il renvoie la valeur de la
Activity
qui l'a créé, via le rappel créé.Titre d'exemple, voici comment vous pourriez créer la boîte de dialogue à partir d'un
FragmentActivity
.Ici, la ressource de la matrice de _R.tableau.selector_array_ est un tableau de chaînes à afficher dans la boîte de dialogue et preSelectedValue est l'indice de sélectionner sur ouvrir.
Enfin, votre
FragmentActivity
mettra en œuvreOnDialogSelectorListener
et recevra le message de rappel.J'espère que c'est utile à quelqu'un, qu'il m'a fallu PLUSIEURS tentatives pour le comprendre. La pleine mise en œuvre de ce type de
DialogFragment
avec un rappel est ici.Question à partir d'un commentaire Comment appeler cela à partir d'un
Fragment
au lieu d'uneActivity
.D'abord faire quelques changements à la
DialogFragment
.Supprimer la
onAttach
événement, car ce n'est pas la façon la plus simple dans ce scénario.Ajouter une nouvelle méthode pour ajouter une référence à la fonction de rappel
Mettre en œuvre l'auditeur dans votre
Fragment
Maintenant créer une nouvelle instance et de passer une référence à la
Fragment
de l'utiliser.Fragment
au lieu d'uneActivity
est informé lors de l'auditeur incendies?Fragment
Comme d'autres l'ont souligné, mise en œuvre", com.google.android.matériel:matériau:1.0.0' c'est plus simplement
Référence ce guide des matières pour plus. https://material.io/develop/android/docs/getting-started/
De l'essayer.