Android: массив настроек множественного выбора Dialog Builder

Я пытаюсь следовать документам 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();

    }

Выше мой код, но это город с красной линией в затмении:

введите здесь описание изображения

В документах mSelectedItems никогда не объявляется, и я не слишком уверен, как я его объявляю.

Ошибка в .SetMultipleChoiceItems:

Метод setMultiChoiceItems(int, boolean[], DialogInterface.OnMultiChoiceClickListener) в типе AlertDialog.Builder неприменим для аргументов (ArrayList, null, new DialogInterface.OnMultiChoiceClickListener(){})

Но если я изменю его из строки, как мне отобразить в нем текстовые элементы? Любая помощь будет действительно оценена.

Том


person MissCoder87    schedule 22.11.2012    source источник


Ответы (1)


Вы должны предоставить метод от CharSequence[] до setMultiChoiceItems, а не 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));
                            }
                        }
                    })
person sdabet    schedule 22.11.2012
comment
Вы, сэр, можете поужинать у меня дома в любое время. Спасибо. Один быстрый вопрос, как бы я добавил в последовательность символов в другом месте, а не в статический список в начале? - person MissCoder87; 22.11.2012