web-dev-qa-db-fra.com

Comment obtenir l'élément sélectionné d'un dialogue d'alerte à choix unique?

J'ai ce code pour montrer un dialogue avec les options singlechoice (radio).

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 puis-je obtenir le choix qui a été sélectionné?

39
Pentium10

Je sais que ceci est un ancien post, mais je viens de le découvrir et j'ai trouvé que cette solution semblait un peu plus simple que ce qui a été posté ici.

Vous pouvez juste faire comme ça:

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

ListView lw = ((AlertDialog)dialog).getListView();
Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());
98
Dan

J'ai essayé d'utiliser ListView.setSelection(int) mais cela n'a jamais fonctionné comme prévu. J'ai donc 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));
        }
})

La balise est alors facilement accessible après un clic sur un 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
        }
    }
})
13
Matt Briançon

Je crois que vous utilisez une OnClickListener pour setSingleChoiceItems(), pour écouter chaque élément sélectionné. puis une fois que l'utilisateur appuie sur OK, vous définissez cet élément en pierre. Pour le moment, vous ne faites que passer à null, donc rien ne vous empêche de choisir l’article sélectionné.

3
Daniel Lew

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 :)

1
Bishan

Vous pouvez faire comme ceci dans onClick () method

final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.edit_set_waiting_period)
                .setItems(R.array.str_set_waiting_period, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // The 'which' argument contains the index position
                        // of the selected item
                        L.e("selectedItmes", which + "");

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

                    }
                });

        builder.show();
0
135

la position de l'élément sélectionné est déjà indiqué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é 

0
priojeet priyom