【发布时间】:2020-07-10 08:47:49
【问题描述】:
我的 RecyclerView 在滚动时重复标记的项目。
我的 RecyclerView 有 10 行实际显示!如果我单击第一个,它的背景会突出显示。如果我现在向下滚动,则会突出显示另一个项目!
如果我向上滚动,第一个项目不再突出显示,而是另一个项目...
任何我的 RecyclerViewAdapter:
public class SelectSongRecyclerViewAdapter extends RecyclerView.Adapter<SelectSongRecyclerViewAdapter.Holder> {
private Song[] sSongs;
private List<Song> selectedSongs;
public SelectSongRecyclerViewAdapter(Song[] songs) {
sSongs = songs;
selectedSongs = new ArrayList<>();
}
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_selectsongsview, parent, false);
Holder holder = new Holder(view);
return holder;
}
@Override
public void onBindViewHolder(final Holder holder, final int position) {
//holder.imvSong.setImageResource(R.drawable.standardartwork);
holder.txvSongTitle.setText(sSongs[position].getTitle());
holder.txvSongInfo.setText(sSongs[position].getArtists());
holder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selectedSongs.contains(sSongs[position])) {
selectedSongs.remove(sSongs[position]);
holder.linearLayout.setBackgroundResource(android.R.color.transparent);
}
else {
selectedSongs.add(sSongs[position]);
holder.linearLayout.setBackgroundResource(R.color.colorItemSelected);
}
}
});
}
@Override
public int getItemCount() {
return sSongs != null ? sSongs.length : 0;
}
public Song[] getSelectedSongs() {
Song[] songs = new Song[selectedSongs.size()];
return selectedSongs.toArray(songs);
}
public class Holder extends RecyclerView.ViewHolder {
LinearLayout linearLayout;
ImageView imvSong;
TextView txvSongTitle;
TextView txvSongInfo;
public Holder(View layout) {
super(layout);
linearLayout = (LinearLayout) layout;
imvSong = (ImageView) layout.findViewById(R.id.imvSong);
txvSongTitle = (TextView) layout.findViewById(R.id.adap_txvSongtitle);
txvSongInfo = (TextView) layout.findViewById(R.id.adap_txvSongInfo);
}
}
}
我希望你能帮助我! 谢谢!
【问题讨论】:
-
不要在“onBindViewHolder”中使用“位置”,而是尝试使用“holder.getAdapterPosition()”
标签: java android android-recyclerview