Android RecycleView item的点击事件以及背景颜色改变

632 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 首先实现recycle列表:


  • 效果图

在这里插入图片描述

参考:请参考之前写RecycleView的简单实现

随着Android L版本的发布,RecyclerView已经逐渐地取代了ListView,用来显示较多的数据集,RecyclerView相比ListView在性能上有了大幅度的提升,可以说RecyclerView是AbsListView的升级版本。RecyclerView自带了ViewHolder使用,与ListView缓存convertView不同的是,RecyclerView缓存的是ViewHolder,操作对象也是ViewHolder。虽然ListView也带有缓存convertView的功能,但是当使用ListView时,显示、缓存、回收、布局等都是耦合在一起的;而RecyclerView对其进行了解耦,操作更灵活,使得开发者可以更好的自定义各种各样的效果,另外RecyclerView假如了局部刷新。

RecycleView点击的 简单使用:

首先: RecyclerView没有像ListView那样直接已经提供了OnItemClick或者OnItemLongClick等事件回调接 口,所以需要自己来写一个;

  • ==在自定义的Adapter中定义接口==
    //定义接口
    public interface OnItemClickListener{
        void onClick(int position);
    }

    private OnItemClickListener listener;
    public void setOnItemClickListener(OnItemClickListener listener){
        this.listener=listener;
    /**
     * @描述 :根据下标判断颜色背景
     */
    private  int mPosition;
    public int getmPosition() {
        return mPosition;
    }
    public void setmPosition(int mPosition) {
        this.mPosition = mPosition;
    }    }

  • ==在onBindViewHolder中 实现接口==
  @Override
    public void onBindViewHolder(@NonNull Myviewholder holder, int position) {
        //实现接口
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listener!=null){
                    listener.onClick(position);
                     //刷新改变背景颜色
                    notifyDataSetChanged();
                }
            }
        });
         //如果下标和传回来的下标相等 那么确定是点击的条目 把背景设置一下颜色
        if(position==getmPosition()){
            holder.itemView.setBackgroundColor(Color.WHITE);
            holder.tv_recle.setTextColor(Color.BLUE);
        }else{
        //否则 初始化字体颜色背景
            holder.tv_recle.setTextColor(Color.BLACK);
        }
    }
  • ==在onCreate() 中 调用接口==
   adapter.setOnItemClickListener(new ShopRecycleAdapter.OnItemClickListener() {
            @Override
            public void onClick(int position) {
                switch (position){
                    case 0:
                        adapter.setmPosition(position);
                        adapter.notifyDataSetChanged();
                     Toast.makeText(MainActivity.this, "点击了第一个",Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
                        adapter.setmPosition(position);
                        adapter.notifyDataSetChanged();
                      Toast.makeText(MainActivity.this, "点击了第二个",Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
                        adapter.setmPosition(position);
                        adapter.notifyDataSetChanged();
                      Toast.makeText(MainActivity.this, "点击了第三个",Toast.LENGTH_SHORT).show();
                        break;
                    case 3:
                        adapter.setmPosition(position);
                        adapter.notifyDataSetChanged();
                     Toast.makeText(MainActivity.this, "点击了第四个",Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });

以上是整个点击item的流程 [^1]