簡體   English   中英

如何獲取單選警報對話框的選定項目?

[英]How to get selected item of a singlechoice Alert Dialog?

我有這個代碼來顯示一個帶有 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();

我如何獲得已選擇的選項?

我知道這是一個舊帖子,但我剛剛遇到它,發現這個解決方案似乎比這里發布的內容更簡單。

你可以這樣做:

在對話框正按鈕上的onClick()處理程序中,添加以下代碼:

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

請注意,如果您沒有選擇任何選項,它會崩潰,您必須在使用if(lw.getCheckedItemCount() > 0)獲取checkedItem之前在此處添加檢查

我嘗試使用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
        }
    }
})

我相信您對setSingleChoiceItems()使用OnClickListener ,以便在選擇項目時進行偵聽; 然后一旦用戶點擊OK,你就將該項目固定在石頭上。 現在你只是傳遞null,所以沒有什么你不能選擇哪個項目被選中。

您可以在onClick()方法中這樣做

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

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)。 就這樣 :)

所選元素的位置已經在 onClick 方法中給出。 所以我們可以直接訪問數組並輕松獲取所選項目。 在這種情況下: seq[which] 將是所選項目。

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

int a = Integer.valueOf(item);

et.setText(items[a]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM