Android RecyclerView item 实现单选 双选

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Mr___Xu/article/details/86524586

1.单选

adapter中:

public class AddGuanXiAdapter extends RecyclerView.Adapter<AddGuanXiAdapter.MyViewHolder> {
    private Context context;
    private List<FamilyBean> list;
    private int defItem = -1;//默认值
    private OnItemListener onItemListener;

    public AddGuanXiAdapter(Context context, List<FamilyBean> list) {
        this.context = context;
        this.list = list;
    }

    public void setOnItemListener(OnItemListener onItemListener) {
        this.onItemListener = onItemListener;
    }

    public interface OnItemListener {
        void onClick(View v, int pos, String projectc);
    }

    public void setDefSelect(int position) {
        this.defItem = position;
        notifyDataSetChanged();
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                context).inflate(R.layout.add_qinqing_item, parent,
                false));
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tv.setText(list.get(position).getNickName());
        if (defItem != -1) {
            if (defItem == position) {
                holder.tv.setTextColor(Color.parseColor("#ffffff"));
                holder.tv.setBackgroundResource(R.drawable.price_queren_shape);
            } else {
                holder.tv.setTextColor(Color.parseColor("#4c4c4c"));
                holder.tv.setBackgroundResource(R.drawable.fef1f1_shape);
            }
        }
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    /**
     * ViewHolder的类,用于缓存控件
     */
    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tv;

        public MyViewHolder(View view) {
            super(view);
            tv = (TextView) view.findViewById(R.id.tv_guanxi);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemListener != null) {
                        onItemListener.onClick(v, getLayoutPosition(), list.get(getLayoutPosition()).getNickName());
                    }
                }
            });
        }


    }

}

activity中调用:

adapter.setOnItemListener(new AddGuanXiAdapter.OnItemListener() {
    @Override
    public void onClick(View v, int pos, String projectc) {
        adapter.setDefSelect(pos);
        relationship = list.get(pos).getNickName();
    }
});

2.多选

adapter中这个是在adapter中直接设置控件的点击事件:

public class FangWuZDLBAdapter extends RecyclerView.Adapter<FangWuZDLBAdapter.MyViewHolder> {
    private Context context;
    private List<FangWuZDLBBean.ItemsBean> list;
    private OnItemListener onItemListener;
    public static HashMap<Integer, Boolean> isSelected;


    public FangWuZDLBAdapter(Context context, List<FangWuZDLBBean.ItemsBean> items) {
        this.context = context;
        this.list = items;
        init();
    }
    // 初始化 设置所有item都为未选择
    public void init() {
        isSelected = new HashMap<Integer, Boolean>();
        for (int i = 0; i < list.size(); i++) {
            isSelected.put(i, false);
        }
    }

    public interface OnItemListener {
        void onClick(View v, int pos, String projectc);
    }

    public void setOnItemListener(OnItemListener onItemListener) {
        this.onItemListener = onItemListener;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                context).inflate(R.layout.fw_zhangdan_item, parent,
                false));
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
//CheckBox点击事件
        holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!isSelected.get(position)) {
                    isSelected.put(position, true);
                    notifyItemChanged(position);
                    EventBus.getDefault().post(new SelectEventX("1", position + ""));
                } else {
                    isSelected.put(position, false);
                    notifyItemChanged(position);
                    EventBus.getDefault().post(new SelectEventX("2", position + ""));
                }

            }
        });
        holder.mCheckBox.setChecked(isSelected.get(position));

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    /**
     * ViewHolder的类,用于缓存控件
     */
    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tv_num, tv_yehzu, tv_wuye_fei, tv_jinqian;
        CheckBox mCheckBox;

        public MyViewHolder(View view) {
            super(view);
            tv_num = view.findViewById(R.id.tv_num);
            tv_yehzu = view.findViewById(R.id.tv_yehzu);
            tv_wuye_fei = view.findViewById(R.id.tv_wuye_fei);
            tv_jinqian = view.findViewById(R.id.tv_jinqian);
            mCheckBox = view.findViewById(R.id.checkbox);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemListener != null) {
                        onItemListener.onClick(v, getLayoutPosition(), list.get(getLayoutPosition()).getBname());
                    }
                }
            });
        }


    }
}

CheckBox的布局文件:

<CheckBox
    android:id="@+id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="false"
    android:layout_marginLeft="@dimen/dp_10"
    android:button="@drawable/checkbox_style"
    android:focusable="false"
    android:focusableInTouchMode="false"/>

checkbox_style布局文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/protocol_sel1" android:state_checked="true"/>
    <item android:drawable="@drawable/protocol_unsel1" android:state_checked="false"/>
    <item android:drawable="@drawable/protocol_unsel1"/>

</selector>

猜你喜欢

转载自blog.csdn.net/Mr___Xu/article/details/86524586