recyclerview item 单选

1. 代码中有butterknife在adapter里面的使用

2.单选主要用的是SparseBooleanArray 进行数据保存

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {

    //
    private final ArrayList<ItemBean> mDatas;
    private Context context;
    private RecyclerView rv;
    /**
     * SparseBooleanArray 存放boolean 类型的pair(key,value)
     */
    private SparseBooleanArray mSelectArray;

    public MainAdapter(Context context, RecyclerView rv) {
        this.context = context;
        this.rv = rv;
        mDatas = new ArrayList<ItemBean>();
        for (int i = 0; i < 30; i++) {
            ItemBean bean = new ItemBean();
            bean.setMsg("数据" + (char) i);
            mDatas.add(bean);
        }
        mSelectArray = new SparseBooleanArray();
    }

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

    @Override
    public void onBindViewHolder(final MainViewHolder holder, final int position) {
        holder.tvCoupon.setText(mDatas.get(position).getMsg());
        holder.ivSelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mSelectArray.clear();
                mSelectArray.put(position, holder.ivSelect.isChecked());
                notifyDataSetChanged();
            }
        });
        holder.ivSelect.setChecked(mSelectArray.get(position, false));
    }

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

    public void removeData(int position) {
        mDatas.remove(position);
        //  通知RecyclerView控件某个Item已经被删除
        notifyItemRemoved(position);
    }

    public void addData(int position) {
        ItemBean bean = new ItemBean();
        bean.setMsg("add");
        mDatas.add(bean);
        notifyItemInserted(position);
    }

    static class MainViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.ivSelect)
        CheckBox ivSelect;
        @BindView(R.id.tvCoupon)
        TextView tvCoupon;
        @BindView(R.id.tvRight)
        TextView tvRight;

        public MainViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }

    public SparseBooleanArray getmSelectArray() {
        return mSelectArray;
    }

}


item1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="1dp"
    android:background="#efefef"
    android:descendantFocusability="blocksDescendants"
    android:gravity="center"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/ivSelect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:focusable="false"
        android:button="@null"
        android:background="@drawable/cb_bg2"/>

    <TextView
        android:id="@+id/tvCoupon"
        android:layout_width="0dp"
        android:layout_height="140dp"
        android:layout_marginLeft="15dp"
        android:layout_weight="1"
        android:background="@color/colorAccent"
        android:gravity="center"
        android:orientation="vertical"
        android:text="¥50"
        android:textColor="@android:color/white"
        android:textSize="20sp">
    </TextView>

    <TextView
        android:id="@+id/tvRight"
        android:layout_width="0dp"
        android:layout_height="140dp"
        android:layout_marginRight="15dp"
        android:layout_weight="2"
        android:background="@color/colorPrimary"
        android:gravity="center"
        android:text="我是优惠券"
        android:textColor="@android:color/white"
        android:textSize="14sp">
    </TextView>
</LinearLayout>


2. cb_bg2.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/breakfast_radiobutton_checked"  android:state_checked="true"/>
    <item android:drawable="@drawable/breakfast_radiobutton_unchecked"/>
</selector>


以后可以参考的资料:

http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650237708&idx=1&sn=06c24230d4c03310e753bc07d9ae6fb8&chksm=88639a63bf141375670d1bb1dbd3d467c86fd4231116b7658b54af04aaec960dfa3047e7a8e1&scene=4#wechat_redirect

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值