Android отображать изображение в определенной строке списка - PullRequest
0 голосов
/ 01 июля 2011

У меня есть список, содержащий 25 различных предметов.Когда я нажимаю на элемент, соответствующий звуковой файл добавляется в массив, конечно, начиная с индекса 0, и по мере выбора большего количества элементов каждый соответствующий звуковой файл добавляется к следующему индексу массива.Таким образом, при нажатии кнопки воспроизведения воспроизводится звуковой файл, связанный с индексом 0, затем звук для индекса 1 и т. Д., Пока не останется больше индексов.С этим небольшим количеством (возможно, ненужной) фоновой информации, как бы я добавил изображение в список просмотра воспроизводимого в данный момент элемента?Как и iPod, я хочу, чтобы значок справа отображался в ряду воспроизводимого в данный момент звука.У меня есть значок, и я могу отобразить его, но я не уверен, как сказать ему, какую строку отображать, основываясь на воспроизведении индекса звука / массива.Я читал различные учебные пособия по добавлению изображений в списки, но ничего особенного в добавлении только одного изображения к определенной строке.

1 Ответ

1 голос
/ 01 июля 2011

Чтобы решить вашу проблему, я думаю, вам может понадобиться реализовать собственный подкласс 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, я думаю, что вы можете выполнить следующие шаги:

  1. Найдите тип позиции в позиции, TYPE_PLAYING или TYPE_NONPLAYING

  2. Получить экземпляр LayoutInflater для раздувания другого файла макета двумя различными типами элементов. Элемент TYPE_PLAYING должен включать изображение, указывающее, что соответствующий файл элемента воспроизводится. Обратите внимание, что вам нужна переменная Context для получения LayoutInflater. Вы можете объявить член Context в Adapter и инициализировать его в конструкторе Adapter.

  3. Свяжите другую информацию каждого файла: имя файла, длительность и т. Д.

Если воспроизводимый файл изменяется путем нажатия на элемент списка или другого взаимодействия, не забудьте вызвать метод BaseAdapter notifyDatasetChanged () для обновления списка.

Пусть это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...