2010-03-22 9 views
31

J'ai ce code pour montrer une boîte de dialogue avec les options singlechoice (radio).Comment obtenir l'élément sélectionné d'une boîte de dialogue d'alerte singlechoice?

AlertDialog ad = new AlertDialog.Builder(this) 
.setCancelable(false) 
.setIcon(R.drawable.alert_dialog_icon) 
.setTitle(R.string.choose_one) 
.setSingleChoiceItems(seq, pos,null) 
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
    // dialog dismissed 
    } 
}).create(); 

Comment obtenir le choix qui a été sélectionné?

Répondre

82

Je sais que c'est un ancien poste, mais je suis tombé sur elle, et a constaté que cette solution semble à peu plus simple ce qui est affiché ici été.

Vous pouvez juste faire comme ceci:

Dans votre gestionnaire onClick() sur la boîte de dialogue bouton positif, ajoutez le code suivant:

ListView lw = ((AlertDialog)dialog).getListView(); 
Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition()); 
+0

Fonctionne comme un charme! Un +1 bien méritant. –

+0

C'est en fermant le dialogue d'alerte. Comment puis-je le récupérer la prochaine fois que je l'appelle? – Si8

+0

Vous voulez obtenir la valeur qui a été sélectionnée lorsque la boîte de dialogue a été précédemment ouverte, lorsque la boîte de dialogue est ouverte une deuxième fois, est-ce correct? Dans ce cas, ne pouvez-vous pas simplement définir la valeur sélectionnée à une variable locale, puis utiliser cette variable la prochaine fois que vous ouvrez le dialig? – Dan

3

Je crois que vous utilisez un OnClickListener pour setSingleChoiceItems(), pour écouter chaque fois qu'un élément a été sélectionné; Une fois que l'utilisateur a réussi, vous avez mis cet objet dans la pierre. En ce moment, vous ne faites que passer la valeur null, donc rien ne vous permet de choisir quel élément a été sélectionné.

+2

Donc, vous dites que je dois stocker temporairement l'élément lorsque l'événement se déclenche, et enregistrer lorsque la boîte de dialogue est fermée? – Pentium10

+0

Je suppose que théoriquement, vous pourriez faire quelque chose de fantaisiste; Je me demande si AlertDialog.getListView() vous obtiendrait la liste de choix, alors vous pourriez analyser lequel de ces éléments est vérifié. Mais cela semble beaucoup plus de travail que de stocker temporairement l'élément lorsque l'événement se déclenche. –

+0

Vous pouvez utiliser 'AlertDialog.getListView(). GetSelectedItem()' mais cela n'a pas semblé me ​​donner ce que je voulais. –

-8
EditText et = (EditText)findViewById(R.id.editText9); 

int a = Integer.valueOf(item); 

et.setText(items[a]); 
+3

Pouvez-vous élaborer sur ce sujet? Code sans explication n'est pas aussi utile. –

+1

Je ne vois pas comment cela est pertinent. –

+1

Absolument pas pertinent. –

1

1). créer un tableau.

final ArrayList<String> arrData = new ArrayList<String>(); 

2). ajouter des données au tableau que vous avez créé.

if (cursor != null) { 
      if (cursor.moveToFirst()) { 
       do { 

        arrData .add(cursor.getString(1)); 
              // (1 = int columnIndex) 

       } while (cursor.moveToNext()); 
      } 
     } 

3). obtenir des données comme celle-ci.

public void onClick(DialogInterface dialog, int item) { 

         Log.d("Selected", arrData.get(item) + ""); 

        } 

4). c'est tout :)

12

J'ai essayé d'utiliser ListView.setSelection(int) mais cela n'a jamais fonctionné comme prévu donc j'ai plutôt décidé d'utiliser View.setTag() pour stocker temporairement la position sélectionnée.

.setSingleChoiceItems(adapter, -1, 
     new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      ListView lv = ((AlertDialog)dialog).getListView(); 
      lv.setTag(new Integer(which)); 
     } 
}) 

Le tag peut ensuite être accédé facilement après un clic de bouton.

.setPositiveButton(R.string.button_text, 
    new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     ListView lv = ((AlertDialog)dialog).getListView(); 
     Integer selected = (Integer)lv.getTag(); 
     if(selected != null) { 
      // do something interesting 
     } 
    } 
}) 
+0

excellent travail Matt. – Akram

+0

cela fonctionne pour moi –

+0

Je veux vérifier que ici 'adapter' peut être n'importe quel adaptateur (' BaseAdapter', 'ArrayAdapter', etc)? J'ai travaillé avec votre code en utilisant 'BaseAdapter' et ça ne fonctionne pas. –

0

Vous pouvez le faire comme ça dans le onClick() méthode

final AlertDialog.Builder builder = nouveau AlertDialog.Builder (getActivity()); builder.setTitle (R.string.edit_set_waiting_period) .setItems (R.array.str_set_waiting_period, nouvelle DialogInterface.OnClickListener() {public void onClick (dialogue DialogInterface, int qui) {// Le 'qui' argument contient la position d'index // de l'élément sélectionné le (« selectedItmes », qui + « »);.

    ListView lw = ((AlertDialog) dialog).getListView(); 
        Object checkedItem = lw.getAdapter().getItem(which); 
        L.e("checkedItem", checkedItem.toString() + ""); 

       } 
      }); 

    builder.show(); 
0

position de l'élément sélectionné est déjà donnée dans la méthode onClick afin que nous puissions accéder directement au tableau et obtenir l'élément sélectionné sans aucun problème dans ce cas: seq [qui] sera l'élément sélectionné

Questions connexes