setOnClickListener更改recyclerview中的每个第七个视图

时间:2017-09-08 10:51:16

标签: android-recyclerview recycler-adapter

当我点击Recyclerview中的项目时,每七个项目都会产生效果。

  

onBindViewHolder:

public void onBindViewHolder(final ViewHolder holder, final int position) {
        holder.channelName.setText(list.get(position).getChannnelName());
        holder.linearLayoutChannelName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.setBackgroundColor(Color.parseColor("#93bcff"));
            }
        });
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        LinearLayout linearLayoutChannelName;
        TextView channelName;
        public ViewHolder(View itemView) {
            super(itemView);
            channelName = itemView.findViewById(R.id.tv_channel_name);
            linearLayoutChannelName = itemView.findViewById(R.id.ll_channelname);
        }
    }

当我点击一个项目时,每七个项目都会更改其背景颜色,并且它会重复列表中的每七个项目,即使滚动列表,背景颜色也会消失。

https://i.stack.imgur.com/oq2sb.jpg

https://i.stack.imgur.com/rOzQg.jpg

1 个答案:

答案 0 :(得分:0)

不要在onBindViewHolder中使用onClickListener,而是在onCreateViewHolder中设置它,并创建一个成员变量来设置所选项目。你可以这样做。

int mSelectedItemPosition = -1;

//在你的createViewHolder方法

holder.linearLayoutChannelName.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                int position = holder.getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                  mSelectedItemPosition = position;
                  notifyItemRangeChanged(0, yourList.size());
                }
            }
        });

在绑定视图中,检查所选项目位置并设置背景颜色

if(mSelectedItemPosition == position){
  view.setBackgroundColor(Color.parseColor("#yourColor"))
}else{
  view.setBackgroundColor(Color.parseColor("originalColor"));
}