Чтобы решить вашу проблему, я думаю, вам может понадобиться реализовать собственный подкласс BaseAdapter , переопределив абстрактные методы. Как и SimpleAdapter и SimpleCursorAdapter, новый адаптер привязывает данные (звуковой файл в вашем случае) к списку, но ваш BaseAdpater должен быть способен находить, какой вид должен отображаться в каждой позиции списка, и генерировать правильный список. просмотреть элемент.
Вам нужны методы переопределения BaseAdapter для удовлетворения ваших потребностей. Наиболее важными являются следующие:
int getViewTypeCount();
В вашем случае список содержит два типа элементов: играющий или не играющий, поэтому этот метод должен вернуть 2.
int getItemViewType(int position);
Вам нужно поместить здесь некоторую логику, чтобы проверить, воспроизводится ли звуковой файл в позиции параметра? Если воспроизводится элемент в позиции, вы должны вернуть константу типа int, например, TYPE_PLAYING, в противном случае вернуть значение TYPE_NONPLAYING (конечно, вам необходимо определить эти константы заранее).
View getView(int position, View convertView, ViewGroup parentview);
Этот метод имеет наибольшее количество TODO, я думаю, что вы можете выполнить следующие шаги:
Найдите тип позиции в позиции, TYPE_PLAYING или TYPE_NONPLAYING
Получить экземпляр LayoutInflater для раздувания другого файла макета двумя различными типами элементов. Элемент TYPE_PLAYING должен включать изображение, указывающее, что соответствующий файл элемента воспроизводится. Обратите внимание, что вам нужна переменная Context для получения LayoutInflater. Вы можете объявить член Context в Adapter и инициализировать его в конструкторе Adapter.
Свяжите другую информацию каждого файла: имя файла, длительность и т. Д.
Если воспроизводимый файл изменяется путем нажатия на элемент списка или другого взаимодействия, не забудьте вызвать метод BaseAdapter notifyDatasetChanged () для обновления списка.
Пусть это поможет.