Android RecyclerView-滚动时重复,当触摸项目时,它会更改项目';背景

Android RecyclerView-滚动时重复,当触摸项目时,它会更改项目';背景,android,android-recyclerview,Android,Android Recyclerview,我有一个回收站。我想在单击某个项目时更改其背景。 使用“我的代码”时,单击的项目会发生更改,但当滚动时,也会有一些项目的背景也会发生更改,当向后滚动时,初始项目的背景会更改回默认值 这是我的适配器: 公共类MyCustomAdapter扩展了RecyclerView.Adapter{ 私有上下文; 私有数组列表数据; 私人充气机; private int previousPosition=0; 私人资源; 私人提款; 公共MyCustomAdapter(上下文、ArrayList数据){ thi

我有一个回收站。我想在单击某个项目时更改其背景。 使用“我的代码”时,单击的项目会发生更改,但当滚动时,也会有一些项目的背景也会发生更改,当向后滚动时,初始项目的背景会更改回默认值

这是我的适配器:

公共类MyCustomAdapter扩展了RecyclerView.Adapter{

私有上下文;
私有数组列表数据;
私人充气机;
private int previousPosition=0;
私人资源;
私人提款;
公共MyCustomAdapter(上下文、ArrayList数据){
this.context=上下文;
这个数据=数据;
充气器=充气器。从(上下文);
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int位置){
视图=充气机。充气(R.layout.list\u item\u row,parent,false);
MyViewHolder=新的MyViewHolder(视图);
报税表持有人;
}
@凌驾
公共无效onBindViewHolder(最终MyViewHolder MyViewHolder,最终int位置){
myViewHolder.textView1.setText(data.get(position.title));
//myViewHolder.imageView.setImageResource(data.get(position.imageId));
如果(position>previousPosition){//我们正在向下滚动
AnimationUtil.animate(myViewHolder,true);
}否则{//我们将向上滚动
AnimationUtil.animate(myViewHolder,false);
}
先前位置=位置;
最终int currentPosition=位置;
最终信息infoData=data.get(位置);
myViewHolder.cardView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Toast.makeText(上下文,“Onlick Called at position”+position,Toast.LENGTH_LONG).show();
//myViewHolder.imageView.setImageResource(data.get(position.imageId));
resources=context.getResources();
drawable=resources.getDrawable(data.get(position.imageId));
myViewHolder.相对缩进地面(可拉深);
}
});
}
@凌驾
public int getItemCount(){
返回data.size();
}
类MyViewHolder扩展了RecyclerView.ViewHolder{
文本视图文本视图1;
文本视图文本视图2;
卡德维尤;
图像视图图像视图;
相对的相对的;
公共MyViewHolder(查看项目视图){
超级(项目视图);
textView1=(TextView)itemView.findViewById(R.id.card\u front\u text1);
textView2=(TextView)itemView.findViewById(R.id.card\u front\u text2);
imageView=(imageView)itemView.findViewById(R.id.card\u front\u imageView);
relativeLayout=(relativeLayout)itemView.findViewById(R.id.card\u front\u relativeLayout);
cardView=(cardView)itemView.findViewById(R.id.cardView);
}
}
}

XML:


父布局是Cardview,并且有一个相对的子布局。

因为项目视图被RecyclerView重用。
在onBindViewHolder方法中,必须将项目视图设置为正确的状态。

,因为项目视图被RecyclerView重用。
在onBindViewHolder方法中,必须将项目视图设置为正确的状态。

RecyclerView
将重用视图来填充数据。您应该保存单击视图的位置。在
OnClickListener
中保存位置:

myViewHolder.cardView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        clickedPosition = position;
        ......
    }
});
并在
onBindViewHolder
中添加以下语句:

if (position == clickedPosition) {
    resources = context.getResources();
    drawable = resources.getDrawable(data.get(position).imageId);
    myViewHolder.relativeLayout.setBackground(drawable);
} else {
    myViewHolder.relativeLayout.setBackground(/* default background*/);
}

RecyclerView
将重用视图来填充数据。您应该保存单击视图的位置。在
OnClickListener
中保存位置:

myViewHolder.cardView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        clickedPosition = position;
        ......
    }
});
并在
onBindViewHolder
中添加以下语句:

if (position == clickedPosition) {
    resources = context.getResources();
    drawable = resources.getDrawable(data.get(position).imageId);
    myViewHolder.relativeLayout.setBackground(drawable);
} else {
    myViewHolder.relativeLayout.setBackground(/* default background*/);
}