1.前言
1.现在有一个简单的需求,需要实现列表单选功能,如何实现尼?首先我大概说下我实现的思路,首先在Bean(实体类)里面声明一个boolean 值,根据这个boolean值去改变RadioButton的是否选中状态,同时在Activity或者Fragment里面 声明一个变量id和当前下标去做对比。下面看下要实现的效果图!
2.效果图
3.代码实现步骤:
private CommonAdapter<SelectAddressModel.ReturnDataBean> mAdapter;
private List<SelectAddressModel.ReturnDataBean> mDataList = new ArrayList<>();
//private int posIndex;//记录当前下标
private int mSelectedPos = -1;//实现单选 变量保存当前选中的position
/*
* 获取个人地址,这就是用Retrofit请求框架去获取数据,用法就不多讲了isState就是SelectAddressModel 实体类里面声明的一个boolean值
* */
public void getAddressData(String id) {
Api.getApi2().getLoadMemberAddressData(id)
.compose(callbackOnIOToMainThread())
.subscribe(new BaseNetSubscriber<SelectAddressModel>() {
@Override
public void onNext(SelectAddressModel baseBean) {
super.onNext(baseBean);
if (baseBean.getReturnData().size() > 0) {
mDataList.addAll(baseBean.getReturnData());
mDataList.get(0).setState(true);
}
for (int i = 0; i < mDataList.size(); i++) {
if (mDataList.get(i).isState()) {
mSelectedPos = i;
}
}
mAdapter = new CommonAdapter<SelectAddressModel.ReturnDataBean>(aty, R.layout.layout_select_address, mDataList) {
@Override
protected void convert(ViewHolder holder, SelectAddressModel.ReturnDataBean item, int position) {
LinearLayout linAddress = holder.getView(R.id.linAddress);
RadioButton rad_balance = holder.getView(R.id.rad_balance);
RadioGroup radioGroup = holder.getView(R.id.rad_address);
rad_balance.setText(item.getS_weizhiFull());
if (!item.isState()) {
linAddress.setBackgroundColor(getResources().getColor(R.color.colorWhite));
rad_balance.setChecked(false);
} else {
linAddress.setBackgroundColor(getResources().getColor(R.color.address_bg));
rad_balance.setChecked(true);
}
rad_balance.setOnClickListener(v -> {
//实现单选方方法: 设置数据集时,找到默认选中的pos
if (mSelectedPos != position) {
//先取消上个item的勾选状态
mDataList.get(mSelectedPos).setState(false);
linAddress.setBackgroundColor(getResources().getColor(R.color.colorWhite));
rad_balance.setChecked(false);
notifyItemChanged(mSelectedPos);
//设置新Item的勾选状态
mSelectedPos = position;
mDataList.get(mSelectedPos).setState(true);
linAddress.setBackgroundColor(getResources().getColor(R.color.address_bg));
rad_balance.setChecked(true);
notifyItemChanged(mSelectedPos);
}
});
}
};
mBinding.recycviewAddress.setLayoutManager(new LinearLayoutManager(aty));
mBinding.recycviewAddress.setAdapter(mAdapter);
}
@Override
public void onError(Throwable e) {
super.onError(e);
}
});
}
4.注意要点:、
要实现单选功能以上代码就ok了,上面代码也有注释,相信你们都能看懂!这里要说一点 就是当你设置或者取消Item的勾选状态时候,一定要记得notifyItemChanged去更新当前的下标,其实实现列表单选有很多方法,不止这一种,要是写的不好的地方勿喷!谢谢,好啦 代码就分析到这里,有啥问题 欢迎留言。