Come ottenere l'elemento selezionato di una singlechoice Alert di dialogo?
-
21-09-2019 - |
Domanda
Ho questo codice per mostrare una finestra di dialogo con le opzioni 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();
Come faccio ad avere la scelta che è stata selezionata?
Soluzione
So che questo è un vecchio post, ma ho appena imbattuto in esso, e ha scoperto che questa soluzione sembra a po 'più semplice che cosa è stato postato qui.
Si può solo fare in questo modo:
Nel vostro gestore onClick()
sul pulsante positiva di dialogo, aggiungere il seguente codice:
ListView lw = ((AlertDialog)dialog).getListView();
Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());
Altri suggerimenti
Ho cercato di usare ListView.setSelection(int)
ma non ha mai funzionato come previsto così invece ho deciso di fare uso di View.setTag () per memorizzare temporaneamente la posizione selezionata.
.setSingleChoiceItems(adapter, -1,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ListView lv = ((AlertDialog)dialog).getListView();
lv.setTag(new Integer(which));
}
})
Il tag può quindi facilmente accessibile dopo un clic del pulsante.
.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
}
}
})
Credo che si utilizza un OnClickListener
per setSingleChoiceItems()
, ad ascoltare ogni volta che è stata selezionata una voce; poi una volta che l'utente preme va bene, si imposta l'elemento in pietra. In questo momento siete solo di passaggio nullo, quindi niente che non si può prendere quale voce selezionata.
1). creare array.
final ArrayList<String> arrData = new ArrayList<String>();
2). aggiungere dati a matrice che si è creato.
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
arrData .add(cursor.getString(1));
// (1 = int columnIndex)
} while (cursor.moveToNext());
}
}
3). ottenere i dati in questo modo.
public void onClick(DialogInterface dialog, int item) {
Log.d("Selected", arrData.get(item) + "");
}
4). questo è tutto:)
posizione dell'elemento selezionato è già dato nel metodo onClick. in modo che possiamo accedere direttamente alla matrice e ottenere l'elemento selezionato senza alcun problema. in questo caso: ss [che] sarà l'elemento selezionato.
Si può fare proprio come questo in su onclick () metodo
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();
EditText et = (EditText)findViewById(R.id.editText9);
int a = Integer.valueOf(item);
et.setText(items[a]);