Независимо от того, используете ли вы ListView
или RecyclerView
, общий шаблон решения будет одинаковым: вам следует сохранить ссылку либо на (a) индекс «в данный момент играет», либо (b) на «текущий» игра "элемент данных.
Давайте посмотрим, каким было бы решение, если бы вы использовали ListView
и сохранили индекс «играющих в данный момент».
Шаг первый будет некоторой переменной, чтобы сохранить то, что в данный момент воспроизводится. Возможно, вы используете int
и трактуете специальное значение -1
как означающее, что ничего не играет.
private int currentlyPlayingPosition;
Всякий раз, когда вы меняете какую-либо песню, которая воспроизводится в данный момент, вы обновляете сохраненное здесь значение (возможно, ++currentlyPlayingPosition
, когда пользователь нажимает «следующая песня» и т. Д.). Затем вам также придется позвонить adapter.notifyDataSetChanged()
, чтобы сказать ListView
, чтобы он перерисовал себя так, чтобы изменилась жирная песня.
В вашем методе getView()
вы можете проверить, является ли чертеж, который вы рисуете, «исполняемой в данный момент» песней, и изменить шрифт на основе этого:
@Override
public View getView(int position, View convertView, ViewGroup container) {
...
if (position == currentlyPlayingPosition) {
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
} else {
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);
}
...
}
Общие шаги относительно просты:
- Отслеживание песни, которая воспроизводится в данный момент (по индексу, по ссылке на объект или другим способом)
- Каждый раз, когда изменяется текущая воспроизводимая песня, сообщите об этом адаптеру.
- Внутри
getView()
проверьте, является ли отображаемая песня текущей исполняемой песней, и покажите специальный пользовательский интерфейс, если это так