Как использовать setMultiChoiceItems () с Custom AlertDialog, который использует эффективный массив arrayapapter? - PullRequest
7 голосов
/ 05 августа 2010

Я пишу музыкальный проигрыватель, в котором используется настраиваемый адаптер, расширяющий BaseAdapter (адаптер эффективности), который я хочу отобразить в AlertDialog с использованием setAdapter(), где пользователь может щелкнуть одну из песен, чтобы переключиться в эту позицию. в списке воспроизведения ИЛИ отметьте песни для удаления из списка воспроизведения. Я попытался использовать пользовательский прослушиватель кликов, чтобы пользователь мог просто долго щелкнуть, чтобы удалить элемент из списка, но listview просто не работает правильно: он удалял неправильные элементы (те, что в конце), даже хотя ArrayList содержал правильные элементы списка воспроизведения ... (когда я удалил элемент из ArrayList, я передал его адаптеру с именем notifyDataSetChanged ... но это не сработало, как я уже упоминал. Определенно, есть ошибка в AlertDialog ListView ..., потому что нет никаких причин, чтобы он отбрасывал результаты с конца, а не правильный элемент.

Итак ... следующий метод, который я хотел бы попробовать, - это использовать setMultiChoiceItems() метод AlertDialog ... но похоже, что он не работает с пользовательским адаптером ... только простые массивы , Должен ли я подкласс AlertDialog и Override метод setMultiChoiceItems() или есть ли способ заставить его работать с ArrayAdapter?

В принципе, я не могу понять, как даже итерировать список, который создает AlertDialog, или даже как-то проходит это представление. Кроме того, я не думаю, что смогу даже прослушать клики на checkboxes, если добавлю их в строку. Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: Задавать вопросы здесь, как волшебство ... Я ответил на свой вопрос ... так я и сделал. Я добавил подсказку к каждому checkbox, которая является позицией элемента в ArrayList. Затем я использовал OnCheckedChangeListener, чтобы захватить выборы. Когда вы устанавливаете подсказку, он добавляет текст к checkbox ..., поскольку фон AlertDialog белый (даже для элементов, по которым щелкают мышью?), Я просто устанавливаю цвет текста подсказки прозрачным.

holder.check.setHintTextColor(Color.TRANSPARENT);
holder.check.setHint(String.valueOf(position));
holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        int position = Integer.parseInt((String) buttonView.getHint());
        Log.v("onCheckedChanged", "Checked: "+isChecked+" returned: "+position+" which should be "+getItem(position).name);                         
    }

});

1 Ответ

3 голосов
/ 11 января 2012

См. Это и Это

, то Передать ссылку на байт [] в setMultiChoiceItems().

final boolean[] booleans = {false, true, false, true, false, false, false};

Затем проверьте значение booleans внутри setPositiveButton().

Если вам нужно передать это AlertDialog, то расширьте AlertDialog и создайте логическое поле, как описано в 1.

...