1. 程式人生 > >recyclerview點選事件與點選更改顏色

recyclerview點選事件與點選更改顏色

點選recyclerview條目改變控制元件顏色

介面卡

import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.jd.demo.R;
import com.jd.demo.bean.FenleiLeftBean;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by dell on 2017/11/13.
 */
public class FenleiLeftAdapter extends RecyclerView.Adapter<FenleiLeftAdapter.ViewHolder> {
    //1、定義一個集合,用來記錄選中
    private List<Boolean> isClicks;
    private Context context;
    private List<FenleiLeftBean.DataBean> list;
    //2、定義監聽並設set方法
    private OnItemClickListener mOnItemClickListener;
    public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
        this.mOnItemClickListener = mOnItemClickListener;
    }
    
    public FenleiLeftAdapter(Context context, List<FenleiLeftBean.DataBean> list) {
        this.context = context;
        this.list = list;
        //3、為集合新增值
        isClicks = new ArrayList<>();
        for(int i = 0;i<list.size();i++){
            isClicks.add(false);
        }
    }

    //建立新View,被LayoutManager所呼叫
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fenlei_left,viewGroup,false);
        ViewHolder vh = new ViewHolder(view);

        return vh;
    }
    //將資料與介面進行繫結的操作
    @Override
    public void onBindViewHolder(final ViewHolder viewHolder, int position) {
        viewHolder.fenlei_left_name.setText(list.get(position).getName());
        Glide.with(context).load(list.get(position).getIcon()).into(viewHolder.fenlei_left_img);

        //4:設定點選事件
        if(mOnItemClickListener!=null) {
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = viewHolder.getLayoutPosition(); // 1
                    for(int i = 0; i <isClicks.size();i++){
                        isClicks.set(i,false);
                    }
                    isClicks.set(position,true);
                    notifyDataSetChanged();
                    mOnItemClickListener.onItemClick(viewHolder.itemView, position); // 2
                }
            });
        }
        //5、記錄要更改屬性的控制元件
        viewHolder.itemView.setTag(viewHolder.fenlei_left_name);
        viewHolder.itemView.setTag(viewHolder.back);
        //6、判斷改變屬性
        if(isClicks.get(position)){
            viewHolder.fenlei_left_name.setTextColor(Color.parseColor("#ff0000"));
            viewHolder.back.setBackgroundColor(Color.parseColor("#f0f0f0"));
        }else{
            viewHolder.back.setBackgroundColor(Color.parseColor("#ffffff"));
            viewHolder.fenlei_left_name.setTextColor(Color.parseColor("#000000"));
        }
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
    //自定義的ViewHolder,持有每個Item的的所有介面元素
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView fenlei_left_name;
        public ImageView fenlei_left_img;
        public LinearLayout back;
        public ViewHolder(View view){
        super(view);
            fenlei_left_name = (TextView) view.findViewById(R.id.fenlei_left_name);
            fenlei_left_img = (ImageView) view.findViewById(R.id.fenlei_left_img);
            back=view.findViewById(R.id.back);
        }
    }
    //7、定義點選事件回撥介面
    public interface OnItemClickListener{
        void onItemClick(View view,int position);
    }
}
都是在介面卡中配置的,步驟都在慢慢看。長按監聽和點選監聽同理