如何获取单一选择警报对话框的选定项目?

Pen*_*m10 40 android android-alertdialog

我有这个代码来显示带有单选(无线电)选项的对话框.

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();
Run Code Online (Sandbox Code Playgroud)

我如何获得所选的选择?

小智 106

我知道这是一个老帖子,但我刚刚遇到它,发现这个解决方案看起来有点简单了,这里发布了什么.

你可以这样做:

onClick()对话框正面按钮的处理程序中,添加以下代码:

ListView lw = ((AlertDialog)dialog).getListView();
Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());
Run Code Online (Sandbox Code Playgroud)

  • 对于AlertDialog**上的**正面或负面监听器的最佳解决方案,因为在那些情况下**= which = -1`**.谢谢+1! (7认同)
  • 请注意,对于单选按钮,它是`getCheckedItemPosition()`而不是``getSelectedItemPosition()`,它总是返回`-1` - 非常令人困惑! (6认同)

Mat*_*çon 14

我尝试使用,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));
        }
})
Run Code Online (Sandbox Code Playgroud)

点击按钮后,可以轻松访问标签.

.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
        }
    }
})
Run Code Online (Sandbox Code Playgroud)