当我开始滚动时,一些项目被重复,没有显示正确的结果,我已经尝试了所有的方法,比如在 Adapter
类。
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
甚至我还试过通过 setHasStableIds(true)
的构造函数中,但没有得到想要的结果。
这是我的 Adapter
阶层
public class NickzAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<PhotozData> list;
private Context context;
private NickzViewHolder holder;
public NickzAdapter(Context context, List<PhotozData> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View row= inflater.inflate(R.layout.single_row,parent, false);
holder = new NickzViewHolder(row);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
this.holder.name.setText(list.get(position).getName());
//Log.d("Bind name",list.get(position).getName());
Glide.with(context).load(list.get(position).getImageUri()).into(this.holder.photo);
}
@Override
public int getItemCount() {
return list.size();
}
}
而这是我的 ViewHolder
阶层
public class NickzViewHolder extends RecyclerView.ViewHolder {
public ImageView photo;
public TextView name, date, time;
public NickzViewHolder(@NonNull View itemView) {
super(itemView);
photo = itemView.findViewById(R.id.photo);
date = itemView.findViewById(R.id.photo_date);
name = itemView.findViewById(R.id.photo_name);
time = itemView.findViewById(R.id.photo_time);
}
我将感谢你的帮助,谢谢你
你可以尝试在你的NickzViewHolder类里面使用这段代码。this.setIsRecyclable(false);
这只是解决这个问题的几种方法之一:
试探
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
holder.setIsRecyclable(false);
holder.name.setText(list.get(position).getName());
//Log.d("Bind name",list.get(position).getName());
Glide.with(context).load(list.get(position).getImageUri()).into(holder.photo);
}
我认为你的Layout Inflater没有得到正确的上下文来膨胀。尝试改变你的
LayoutInflater inflater = LayoutInflater.from(context);
到
LayoutInflater inflater = LayoutInflater.from(parent.getContext());