Как получить выбранный элемент из диалогового окна с одним выбором? - PullRequest
39 голосов
/ 22 марта 2010

У меня есть этот код, чтобы показать диалог с опциями одиночного выбора (радио).

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

Как получить выбранный вариант?

Ответы [ 7 ]

101 голосов
/ 03 октября 2012

Я знаю, что это старый пост, но я только что натолкнулся на него и обнаружил, что это решение кажется немного более простым, чем то, что было здесь опубликовано.

Вы можете просто сделать так:

В обработчике onClick() на положительной кнопке диалога добавьте следующий код:

ListView lw = ((AlertDialog)dialog).getListView();
Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());
14 голосов
/ 09 февраля 2012

Я пытался использовать ListView.setSelection(int), но он не работал должным образом, поэтому вместо этого я решил использовать View.setTag () для временного сохранения выбранной позиции.

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

После нажатия кнопки можно легко получить доступ к тегу.

.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
        }
    }
})
3 голосов
/ 22 марта 2010

Я полагаю, что вы используете OnClickListener для setSingleChoiceItems(), чтобы прослушивать каждый раз, когда выбран элемент; затем, как только пользователь нажмет «хорошо», вы установите этот элемент в камне. Прямо сейчас вы просто пропускаете ноль, так что вы ничего не можете подобрать, какой элемент был выбран.

1 голос
/ 18 ноября 2011

1). создать массив.

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

2). добавить данные в созданный вами массив.

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

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

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

3). получить такие данные.

public void onClick(DialogInterface dialog, int item) {

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

                    }

4). вот и все :)

0 голосов
/ 03 марта 2018

позиция выбранного элемента уже указана в методе onClick. Таким образом, мы можем получить прямой доступ к массиву и получить выбранный элемент без каких-либо хлопот. в этом случае: seq [which] будет выбранным элементом.

0 голосов
/ 16 августа 2017

Вы можете сделать то же самое в 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 голосов
/ 17 мая 2011
EditText et = (EditText)findViewById(R.id.editText9);

int a = Integer.valueOf(item);

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