Я пишу музыкальный проигрыватель, в котором используется настраиваемый адаптер, расширяющий 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);
}
});