У меня есть простой mp3-плеер на основе RecyclerView .
Существует Адаптер и ViewHolder для обработки треков в списке воспроизведения.
public class TracksAdapter extends RecyclerView.Adapter<TracksAdapter.ViewHolder> {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cell_playlist, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.trackName.setText("Track " + position);
}
@Override
public int getItemCount() {
return tracks.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
final TextView trackName;
ViewHolder(View itemView) {
super(itemView);
trackName = itemView.findViewById(R.id.trackName);
}
}
}
Когда я нажимаю на дорожку, я хочу изменить цвет фона выбранной дорожки в списке воспроизведения. Проблема в том, что когда я устанавливаю цвет фона для одного элемента, он будет влиять на каждую десятую ячейку в списке воспроизведения.
Например, если в списке воспроизведения 100 треков, будет выделено 10 треков, включая выбранные.
Метод findViewHolderForAdapterPosition (position) возвращает ViewHolder с выбранной дорожкой.
private void setTrackColor(int position) {
RecyclerView.ViewHolder holder =
recyclerView.findViewHolderForAdapterPosition(position);
if (holder == null) return;
View item = holder.itemView;
item.setBackgroundColor(ContextCompat.getColor(main, R.color.playing));
}