RecyclerView不能正常工作,项目重复,并不断变化。

问题描述 投票:0回答:1

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

我将感谢你的帮助,谢谢你

android android-recyclerview recycler-adapter
1个回答
0
投票

你可以尝试在你的NickzViewHolder类里面使用这段代码。this.setIsRecyclable(false);这只是解决这个问题的几种方法之一:


0
投票

试探

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

            }

内联

enter image description here


0
投票

我认为你的Layout Inflater没有得到正确的上下文来膨胀。尝试改变你的

LayoutInflater inflater = LayoutInflater.from(context);

LayoutInflater inflater = LayoutInflater.from(parent.getContext());
© www.soinside.com 2019 - 2024. All rights reserved.