喜马拉雅项目做推荐页面时,RecycleView的item重复显示
做喜马拉雅项目的时候,发现推荐页面的一些item会重复显示,且刷新的时候也不是在底部刷新,会在中间某个item进行刷新!
但是点进去获取详情页面的时候,显示的标题和作者信息是正确的。猜想是推荐页面的RecycleView的适配器设置position的时候出现了问题,但一直解决不了。




点进去后,详情页面显示是正确的,和外面的推荐页面显示的标题等信息对不上。代码是跟着拉哥写的,不知道哪里出了问题。
public class RecommendAdapter extends RecyclerView.Adapter<RecommendAdapter.InnerHolder> {
private List<Album> listData = new ArrayList<>();
private View itemview;
private onItemClickLister mOnItemClickLister;
@Override
public RecommendAdapter.InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
itemview = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_search_recommend,parent,false);
return new InnerHolder(itemview);
}
/**
* onBindViewHolder()用来绑定数据,设置数据
* 系统会自动传进来一个holder对象
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int mposition = (int) v.getTag();
mOnItemClickLister.itemClick(listData.get(mposition));
}
});
holder.setData(listData.get(position)); // 怀疑是这里传入的position出现了问题
}
@Override
public int getItemCount() {
if(listData != null){
return listData.size();
}
return 0;
}
public void getdata(List<Album> albumList) {
if(listData != null){
listData.clear();
listData.addAll(albumList);
}
//更新UI,这个函数能够检测到数据的变化进行监测
this.notifyDataSetChanged();
}
public class InnerHolder extends RecyclerView.ViewHolder {
public InnerHolder(View itemView) {
super(itemView);
}
public void setData(Album album) {
//找到各个控件,并给他们设置数据
//itemview是在createviewholer中载入的list每个item的view布局,然后将它传入InnerHolder的构造器
//再将其传入父类ViewHolder中,在父类中它是public的,所以其他地方能够直接使用它
ImageView albumCoverIV = itemview.findViewById(R.id.album_cover);
TextView albumTitleTV = itemview.findViewById(R.id.album_item_title);
TextView albumIntroTV = itemview.findViewById(R.id.album_item_content);
TextView albumPlayCountTV = itemview.findViewById(R.id.album_play_count);
TextView albumCotentCountTV = itemview.findViewById(R.id.album_number);
//图片要使用框架来加载
//albumCoverIV.setImageBitmap(album.getMiddleCover());
//用毕加索来引入图片
Picasso.with(itemview.getContext()).load(album.getCoverUrlLarge()).into(albumCoverIV);
albumTitleTV.setText(album.getAlbumTitle());
albumIntroTV.setText(album.getAlbumIntro());
albumPlayCountTV.setText(album.getPlayCount()/10000+"万");
albumCotentCountTV.setText(album.getIncludeTrackCount()+"集");
}
}
public interface onItemClickLister{
public void itemClick(Album album);
}
public void setItemLister(onItemClickLister lister){
this.mOnItemClickLister = lister;
}
}
item重复显示,你看数据。不要请求太多,数量减少,然后就可以看出来了。