3

我正在尝试关注有关多选对话框的 android 文档。我遇到了问题,我认为这与我尝试加载的数组类型有关。

public void addCondition(View view){

         ArrayList<String> mHelperNames= new ArrayList<String>();
           mHelperNames.add("Test Item");
           mHelperNames.add("Test Item");
           mHelperNames.add("Test Item");


           mSelectedItems = new ArrayList();  

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("My Title")
                   .setMultiChoiceItems(mHelperNames, null,
                              new DialogInterface.OnMultiChoiceClickListener() {
                       @Override
                       public void onClick(DialogInterface dialog, int which,
                               boolean isChecked) {
                           if (isChecked) {

                               mSelectedItems.add(which);
                           } else if (mSelectedItems.contains(which)) {

                               mSelectedItems.remove(Integer.valueOf(which));
                           }
                       }
                   })

                   .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                       @Override
                       public void onClick(DialogInterface dialog, int id) {
                            //Create onlcick method
                       }
                   })
                   .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                       @Override
                       public void onClick(DialogInterface dialog, int id) {
                            //Create onlcick method
                       }
                   });
            builder.show();

    }

以上是我的代码,但它是eclipse中的红线城市:

在此处输入图像描述

在文档中,从未声明过 mSelectedItems,而且我不太确定我将其声明为什么。

.SetMultipleChoiceItems 上的错误是:

AlertDialog.Builder 类型中的方法 setMultiChoiceItems(int, boolean[], DialogInterface.OnMultiChoiceClickListener) 不适用于参数 (ArrayList, null, new DialogInterface.OnMultiChoiceClickListener(){})

但是,如果我从字符串中更改它,如何在其中显示文本项?任何帮助将不胜感激。

汤姆

4

1 回答 1

7

您必须提供一个CharSequence[]tosetMultiChoiceItems方法,而不是一个ArrayList.

你可以这样创建mHelperNames

CharSequence[] mHelperNames = new CharSequence[] { "test item 1", "test item 2" };

并且不要忘记声明mSelectedItems

final List<Integer> mSelectedItems = new ArrayList<Integer>(); 

(它必须是最终的,因为您从内部类访问它)

mHelperNames如果您以后需要修改它,您也可以保留为 ArrayList。然后您需要在调用时将其转换为数组setMultiChoiceItems

    List<CharSequence> mHelperNames = new ArrayList<CharSequence>();
    mHelperNames.add("Test Item 1");
    mHelperNames.add("Test Item 2");

    final List<Integer> mSelectedItems = new ArrayList<Integer>();

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("My Title")
            .setMultiChoiceItems(mHelperNames.toArray(new CharSequence[mHelperNames.size()]), null,
                    new DialogInterface.OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which, boolean isChecked) {
                            if (isChecked) {

                                mSelectedItems.add(which);
                            } else if (mSelectedItems.contains(which)) {

                                mSelectedItems.remove(Integer
                                        .valueOf(which));
                            }
                        }
                    })
于 2012-11-22T09:32:55.543 回答