首页 > 解决方案 > RecyclerView 工作不正常,项目重复,不断变化

问题描述

当我开始滚动时,一些项目被重复,没有显示正确的结果,我已经尝试了一切,比如在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);
    }

我会很感激你的帮助,谢谢

标签: androidandroid-recyclerview

解决方案


测试一下

 @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);

            }

链接

在此处输入图像描述


推荐阅读