滚动后回收器视图项目颜色更改重复

SAR*_*H V 4 android android-recyclerview

滚动后回收器视图项目颜色更改重复。

我曾经在 Recyclerview 列表的特定位置更改颜色。当滚动发生时,底部的另一个项目有相同的变化。它正在重复。如何解决这个问题?

 holder.recycle_Listing.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            itemListener.connectionClicked(v,position, itemtype);

            holder.mainlayout.setBackgroundColor(Color.parseColor("#e927a4d1"));

        }
    });
Run Code Online (Sandbox Code Playgroud)

sha*_*mar 5

回收器视图回收 OnBindViewHolder 中的视图。所以当项目被点击时,它会反映在其他一些位置。解决这个问题。创建一个全局 SparseBooleanArray 来存储点击的位置。

private final SparseBooleanArray array=new SparseBooleanArray();
Run Code Online (Sandbox Code Playgroud)

然后在最终视图中添加 clickListener 和 onClick 存储被点击项目的位置。

public class ViewHolder extends RecyclerView.ViewHolder {
    public YOURVIEW view;
    public ViewHolder(View v) {
        super(v);
        view = (YOURVIEW) v.findViewById(R.id.YOURVIEWID);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                array.put(getAdapterPosition(),true);
                notifyDataSetChanged();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

在 OnBindViewHolder 里面,

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    if(array.get(position)){
        holder.mainlayout.setBackgroundColor(Color.parseColor("#e927a4d1"));
    }else{
        holder.mainlayout.setBackgroundColor(UNSELECTEDCOLOR);
    }
}
Run Code Online (Sandbox Code Playgroud)