2010-03-22 5 views
31

Ich habe diesen Code, um einen Dialog mit singlechoice (Radio) Optionen anzuzeigen.Wie man ausgewählten Artikel eines Singlechoice Alert Dialogs erhält?

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

Wie bekomme ich die Auswahl, die ausgewählt wurde?

Antwort

82

Ich weiß, dass dies eine alte Post, aber ich kam gerade über sie, und stellte fest, dass diese Lösung bei wenig scheint einfach, dass was hier gepostet.

Sie können wie folgt tun:

In Ihrem onClick() Handler auf dem Dialog positive Taste, fügen Sie den folgenden Code ein:

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

Funktioniert wie ein Charme! Ein wohlverdientes +1. –

+0

Schließen Sie den Alarmdialog. Wie kann ich es beim nächsten Aufruf abrufen? – Si8

+0

Sie möchten den Wert erhalten, der gewählt wurde, als der Dialog zuvor geöffnet wurde, wenn der Dialog ein zweites Mal geöffnet wird, ist das korrekt? In diesem Fall können Sie den ausgewählten Wert nicht einfach auf eine lokale Variable setzen und diese Variable dann beim nächsten Öffnen der Einwahl verwenden? – Dan

3

Ich glaube, dass Sie eine OnClickListener für setSingleChoiceItems() verwenden, um zu hören, wann immer ein Element ausgewählt wurde; Sobald der Benutzer in Ordnung ist, setzen Sie den Gegenstand in Stein. Im Moment übergibst du nur Null, also kannst du nichts auswählen, welches Element ausgewählt wurde.

+2

Sie sagen, ich muss das Element vorübergehend speichern, wenn das Ereignis ausgelöst wird, und speichern, wenn der Dialog geschlossen wird? – Pentium10

+0

Ich denke, dass Sie theoretisch etwas Zarteres tun könnten; Ich frage mich, ob AlertDialog.GetListView() würde Sie die Auswahlliste bekommen, dann könnten Sie analysieren, welche dieser Elemente überprüft wird. Aber das scheint viel mehr Arbeit zu sein, als das Objekt vorübergehend zu speichern, wenn das Ereignis ausgelöst wird. –

+0

Sie können 'AlertDialog.getListView(). GetSelectedItem()' aber das schien mir nicht zu geben, was ich wollte. –

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

int a = Integer.valueOf(item); 

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

Können Sie etwas dazu ausarbeiten? Code ohne Erklärung ist nicht so hilfreich. –

+1

Ich kann nicht sehen, wie das überhaupt relevant ist. –

+1

Absolut irrelevant. –

1

1). Array erstellen

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

2). Fügen Sie Daten zum Array hinzu, das Sie erstellt haben.

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

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

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

3). bekomme Daten wie diese.

public void onClick(DialogInterface dialog, int item) { 

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

        } 

4). das ist alles :)

12

Ich habe versucht, ListView.setSelection(int) zu verwenden, aber es funktionierte nie wie erwartet, stattdessen entschied ich mich, View.setTag() zu verwenden, um die ausgewählte Position vorübergehend zu speichern.

Das Tag kann dann nach einem Klick einfach aufgerufen werden.

.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

großartige Arbeit Matt. – Akram

+0

es funktioniert für mich –

+0

Ich möchte überprüfen, dass hier "Adapter" kann jeder Adapter ('BaseAdapter',' ArrayAdapter', etc) sein? Ich habe mit Ihrem Code mit 'BaseAdapter' gearbeitet und es funktioniert nicht. –

0

Sie können wie dies nur tun, in auf onClick() Methode

letzte AlertDialog.Builder-Builder = neue AlertDialog.Builder (getActivity()); builder.setTitle (R.string.edit_set_waiting_period) .setItems (R.array.str_set_waiting_period, neu DialogInterface.OnClickListener() { public void onClick (DialogInterface Dialog, int which) { // Die 'die' Argument enthält die Indexposition // des ausgewählten Elements Le ("selectedItmes", die + "");.

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

       } 
      }); 

    builder.show(); 
0

Position des ausgewählten Element bereits in dem onClick Verfahren gegeben ist, so können wir die den Array-Zugriffs direkt und erhalten Sie den ausgewählten Artikel ohne Probleme in diesem Fall: seq [die] wird der ausgewählte Artikel sein.

Verwandte Themen