AlertDialog.Builder.setSingleChoiceItems导致多选列表

时间:2013-01-01 11:41:51

标签: android android-alertdialog

我使用AlertDialog使用AlertDialog.Builder创建setSingleChoiceItems,将ListAdapter设置为源自CursorAdapter的自定义类:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title")
       .setSingleChoiceItems(mAdapter, -1, new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which)
         {
           // Do nothing.
         }})
       .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which)
         {
           Log.d(TAG, "Ok clicked.");
         }})
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which)
         {
           Log.d(TAG, "Cancel clicked.");
         }});

尽管使用setSingleChoiceItems(),但我生成的对话框包含一个带复选框的列表,可以检查多个项目。我希望看到带有单选按钮的列表。

如何让对话框只允许选择一个项目,并使用单选按钮显示该选项?

更新

如果我将setSingleChoiceItems作为列表项源而不是适配器调用String[],我会得到所需的结果:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title")
       .setSingleChoiceItems(new String[] {"one","two","three"}, -1, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which)
           {
             // Do nothing.
           }});

所以看来适配器会导致问题。我仍然不确定为什么。

1 个答案:

答案 0 :(得分:3)

正如K-ballo暗示的那样,问题在于自定义适配器。它使用带复选框的自定义布局。我用SimpleCursorAdapter替换了自定义适配器,它按预期工作:

mAdapter = new SimpleCursorAdapter(getActivity(),
                                   android.R.layout.simple_list_item_single_choice,
                                   null,
                                   new String[] { "title" },
                                   new int[] { android.R.id.text1 },
                                   0);