2010-03-22 4 views
31

У меня есть этот код, чтобы показать диалог с параметрами singlechoice (radio).Как получить выбранный элемент диалогового окна Alert Dialog?

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

Как выбрать тот, который был выбран?

ответ

82

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

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

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

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

Работает как очарование! Хорошо достойный +1. –

+0

Вот и закрываем alertdialog. Как получить его, когда в следующий раз он будет вызван? – Si8

+0

Вы хотите получить значение, которое было выбрано, когда диалог был предварительно открыт, когда диалог открывается во второй раз, это правильно? В этом случае вы не можете просто установить выбранное значение в локальную переменную, а затем использовать эту переменную при следующем открытии диалоги? – Dan

3

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

+2

Итак, вы говорите, что я должен временно хранить элемент при срабатывании события и сохранять, когда диалог отклоняется? – Pentium10

+0

Я предполагаю, что теоретически вы могли бы сделать что-то более интересное; Интересно, если AlertDialog.getListView() предоставит вам список выбора, тогда вы сможете проанализировать, какой из этих элементов проверяется. Но это похоже на гораздо большую работу, чем на временное хранение элемента при срабатывании события. –

+0

Вы можете использовать 'AlertDialog.getListView(). GetSelectedItem()', но это, похоже, не дало мне того, что я хотел. –

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

int a = Integer.valueOf(item); 

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

Можете ли вы рассказать об этом? Код без объяснений не так полезен. –

+1

Я не вижу, как это в любом случае имеет значение. –

+1

Абсолютно не имеет значения. –

1

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). вот и все :)

12

Я попытался использовать 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 
     } 
    } 
}) 
+0

отличная работа Мэтт. – Akram

+0

это работает для меня –

+0

Я хочу проверить, что здесь «адаптер» может быть любым адаптером ('BaseAdapter',' ArrayAdapter' и т. Д.)? Я работал с вашим кодом с помощью «BaseAdapter» и не работал. –

0

Вы можете сделать так же, как это на OnClick() метод

final AlertDialog.Builder builder = new AlertDialog.Builder (getActivity()); builder.setTitle (R.string.edit_set_waiting_period) .setItems (R.array.str_set_waiting_period, новый DialogInterface.OnClickListener() { общественного недействительный OnClick (диалог DialogInterface, внутр который) {// 'который' аргумент содержит позиция индекса // выбранного элемент Le («selectedItmes», который + «»);.

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

       } 
      }); 

    builder.show(); 
0

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

 Смежные вопросы

  • Нет связанных вопросов^_^