Как использовать setMultiChoiceItems () с пользовательским AlertDialog, который использует эффективный массивный адаптер?

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

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

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

РЕДАКТИРОВАТЬ: Задавать вопросы здесь, как волшебство ... Я ответил на свой собственный вопрос ... Вот как я это сделал. Я добавил подсказку к каждому флажку , который является позицией элемента в ArrayList . Затем я использовал OnCheckedChangeListener для захвата выборов. Когда вы устанавливаете подсказку, он добавляет текст к флажку ... так как фон 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);                         
    }

});
7
задан XXX 11 January 2012 в 12:21
поделиться