【Android】 RecyclerView、ListView实现单选列表的优雅之路

Log.d(“TAG”, “onBindViewHolder() called with: holder = [” + holder + “], position = [” + position + “]”);

holder.ivSelect.setSelected(mDatas.get(position).isSelected());//“CheckBox”

holder.tvCoupon.setText(mDatas.get(position).getName());//TextView

holder.ivSelect.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

//实现单选,第一种方法,十分简单, Lv Rv通用,因为它们都有notifyDataSetChanged()方法

// 每次点击时,先将所有的selected设为false,并且将当前点击的item 设为true, 刷新整个视图

for (TestBean data : mDatas) {

data.setSelected(false);

}

mDatas.get(position).setSelected(true);

notifyDataSetChanged();

}

});

ViewHolder:

public static class CouponVH extends RecyclerView.ViewHolder {

private ImageView ivSelect;

private TextView tvCoupon;

public CouponVH(View itemView) {

super(itemView);

ivSelect = (ImageView) itemView.findViewById(R.id.ivSelect);

tvCoupon = (TextView) itemView.findViewById(R.id.tvCoupon);

}

}

方案优点:

简单粗暴

方案缺点:

其实需要修改的Item只有两项

一个当前处于选中状态的Item->普通状态

再将当前手指点击的这个Item->选中状态

但采用普通方案,则会刷新整个一屏可见的Item,重走他们的getView()/onBindViewHolder()方法。

其实一个屏幕一般最多可见10+个Item,遍历一遍也无伤大雅。

但咱们还是要有追求优雅的心,所以我们继续往下看。

2 利用Rv的notifyItemChanged()定向刷新:

本方案可以中速阅读

⑴本方案需要在Adapter里新增一个字段:

private int mSelectedPos = -1;//实现单选 方法二,变量保存当前选中的position

⑵在设置数据集时(构造函数,setData()方法等:),初始化 mSelectedPos 的值。

//实现单选方法二: 设置数据集时,找到默认选中的pos

for (int i = 0; i < mDatas.size(); i++) {

if (mDatas.get(i).isSelected()) {

mSelec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值