如何用RecyclerView android选择一个单选按钮?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用RecyclerView android选择一个单选按钮?相关的知识,希望对你有一定的参考价值。
我有一个带RadioButton的RecyclerView我只想在同一时间选择一个RadioButton并且我的代码使它工作正常,但当我从上到下重复选择时,选择消失我怎么能修复它,谢谢。
private RadioButton lastCheckedRB = null;
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
ContactUsModel contactUsModel = orderList.get(position);
holder.orderNum.setText(contactUsModel.getOrderNum());
holder.orderCost.setText(contactUsModel.getOrderCost());
holder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
RadioButton checked_rb = (RadioButton) group.findViewById(checkedId);
if (lastCheckedRB != null &&lastCheckedRB.isChecked()) {
lastCheckedRB.setChecked(false);
}
//store the clicked radiobutton
lastCheckedRB = checked_rb;
}
});
你可以这样做,使用RadioButton我只是写而不检查但这是一个暗示 -
private CompoundButton lastCheckedRB = null;
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
ContactUsModel contactUsModel = orderList.get(position);
holder.orderNum.setText(contactUsModel.getOrderNum());
holder.orderCost.setText(contactUsModel.getOrderCost());
holder.readioBtn.setOnCheckedChangeListener(ls);
holder.readioBtn.setTag(position);
}
private OnCheckedChangeListener ls = (new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
int tag = (int) buttonView.getTag();
;
if (lastCheckedRB == null) {
lastCheckedRB = buttonView;
} else if (tag != (int) lastCheckedRB.getTag()) {
lastCheckedRB.setChecked(false);
lastCheckedRB = buttonView;
}
}
});
在orderList
中使用一个临时变量
例如:isSelected = false;
确保将其添加到arrayList
的所有对象中
当你选择任何单选按钮时,只需更新当前位置orderList
isSelected = true
和剩余的isSelected = false
;
并致电notifyDataSetChanged()
还要确保你正在检查
if(isSelcted)
redioButton.setChecked(true);
else
redioButton.setChecked(false);
例如:if(csSelectedAddressPos == position)holder.radioBtn.setChecked(true); else holder.radioBtn.setChecked(false);
holder.radioBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//set object isChecked here
csSelectedAddressPos = position;
notifyDataSetChanged();
}
});
您不需要使用Tag
保持位置或使用notifyDataSetChanged()
重新加载列表。只需使用checkedRadioButton
并切换它。然后你可以使用checkedRadioButton
来获取所选项目。
private var checkedRadioButton: CompoundButton? = null
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemView.radio_button.setOnCheckedChangeListener(checkedChangeListener)
if (holder.itemView.radio_button.isChecked) checkedRadioButton = holder.itemView.radio_button
}
private val checkedChangeListener = CompoundButton.OnCheckedChangeListener { compoundButton, isChecked ->
checkedRadioButton?.apply { setChecked(!isChecked) }
checkedRadioButton = compoundButton.apply { setChecked(isChecked) }
}
1st:获得个人单选按钮ID。第二步:将点击监听器分配给单个单选按钮。
说你有6个单选按钮:
{
radioButton1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
radioButton1.setChecked(true);
radioButton2.setChecked(false);
radioButton3.setChecked(false);
radioButton4.setChecked(false);
radioButton5.setChecked(false);
radioButton6.setChecked(false);
}
});
//类似地将监听器添加到所有单选按钮:
radioButton2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
radioButton2.setChecked(true);
radioButton1.setChecked(false);
radioButton3.setChecked(false);
radioButton4.setChecked(false);
radioButton5.setChecked(false);
radioButton6.setChecked(false);
}
});
}
以上是关于如何用RecyclerView android选择一个单选按钮?的主要内容,如果未能解决你的问题,请参考以下文章
Android教程2020 - RecyclerView响应点击
如何用recyclerview和viewpager2实现exoplayer?