android - RecyclerView 中的单个 RadioButton
android - Single RadioButton in RecyclerView
我有一个 RecyclerView,其项目仅包含 RadioButton,我的适配器创建了具有某些位置的 RecyclerView - 可以是 5-10 个位置,每个位置都有 RadioButton。但是这些RadioButtons不在同一个RadioGroup中,因为它们都在不同的RecyclerView位置。有什么办法可以设置单选吗?
PS:我找到了这个,但它都是关于 RecyclerView 位置中的 RadioGroups,我只有 RadioButtons。
您可以通过使用 boolean
变量 isChecked
.
创建模型 class 来管理它
当你 select 一个 RadioButton
首先为所有的人做 isChecked = false
然后为你的 selected 按钮做真然后调用 notifyDataSetChanged
.
在适配器中使用
radioButton.setChecked(list.get(position).isChecked())
一定能帮到你。
我遇到了同样的问题。根据 Vishal Chhodwani 的回答,我编写了以下解决方案,希望它可以帮助其他读者。
class MyRecycler extends RecyclerView.Adapter<MyRecycler.RecyclerViewHolder> {
static class RecyclerViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.aRadioButton)
RadioButton rb;
public RecyclerViewHolder(View itemView, int viewType, final Context context) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
private List<MyModel> list;
private RadioButton selectedRadioButton;
// Constructor and other methods here...
@Override
public void onBindViewHolder(final MyRecycler.RecyclerViewHolder holder, int position) {
RadioButton radioButton = holder.rb;
radioButton.setChecked(list.get(position).isChecked());
radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Set unchecked all other elements in the list, so to display only one selected radio button at a time
for(MyModel model: list)
model.setChecked(false);
// Set "checked" the model associated to the clicked radio button
list.get(position).setChecked(true);
// If current view (RadioButton) differs from previous selected radio button, then uncheck selectedRadioButton
if(null != selectedRadioButton && !v.equals(selectedRadioButton))
selectedRadioButton.setChecked(false);
// Replace the previous selected radio button with the current (clicked) one, and "check" it
selectedRadioButton = (RadioButton) v;
selectedRadioButton.setChecked(true);
});
}
}
KOTLIN 2021 测试
不管数据列表大小
只有RadioButton没有RadioGroup的单选RecyclerView及其测试
在您的适配器中的变量中声明一个 RadioButton class:
private var lastCheckedRB: RadioButton? = null
现在在你的 Adapter class onBindViewHolder 中,将 OnclickListener 写入 RadioButton:
holder.YOURRADIOBUTTON.setOnClickListener {
if (lastCheckedRB!=null){
lastCheckedRB?.isChecked=false
}
lastCheckedRB = holder.YOURRADIOBUTTON
}
我有一个 RecyclerView,其项目仅包含 RadioButton,我的适配器创建了具有某些位置的 RecyclerView - 可以是 5-10 个位置,每个位置都有 RadioButton。但是这些RadioButtons不在同一个RadioGroup中,因为它们都在不同的RecyclerView位置。有什么办法可以设置单选吗?
PS:我找到了这个
您可以通过使用 boolean
变量 isChecked
.
当你 select 一个 RadioButton
首先为所有的人做 isChecked = false
然后为你的 selected 按钮做真然后调用 notifyDataSetChanged
.
在适配器中使用
radioButton.setChecked(list.get(position).isChecked())
一定能帮到你。
我遇到了同样的问题。根据 Vishal Chhodwani 的回答,我编写了以下解决方案,希望它可以帮助其他读者。
class MyRecycler extends RecyclerView.Adapter<MyRecycler.RecyclerViewHolder> {
static class RecyclerViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.aRadioButton)
RadioButton rb;
public RecyclerViewHolder(View itemView, int viewType, final Context context) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
private List<MyModel> list;
private RadioButton selectedRadioButton;
// Constructor and other methods here...
@Override
public void onBindViewHolder(final MyRecycler.RecyclerViewHolder holder, int position) {
RadioButton radioButton = holder.rb;
radioButton.setChecked(list.get(position).isChecked());
radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Set unchecked all other elements in the list, so to display only one selected radio button at a time
for(MyModel model: list)
model.setChecked(false);
// Set "checked" the model associated to the clicked radio button
list.get(position).setChecked(true);
// If current view (RadioButton) differs from previous selected radio button, then uncheck selectedRadioButton
if(null != selectedRadioButton && !v.equals(selectedRadioButton))
selectedRadioButton.setChecked(false);
// Replace the previous selected radio button with the current (clicked) one, and "check" it
selectedRadioButton = (RadioButton) v;
selectedRadioButton.setChecked(true);
});
}
}
KOTLIN 2021 测试
不管数据列表大小
只有RadioButton没有RadioGroup的单选RecyclerView及其测试
在您的适配器中的变量中声明一个 RadioButton class:
private var lastCheckedRB: RadioButton? = null
现在在你的 Adapter class onBindViewHolder 中,将 OnclickListener 写入 RadioButton:
holder.YOURRADIOBUTTON.setOnClickListener {
if (lastCheckedRB!=null){
lastCheckedRB?.isChecked=false
}
lastCheckedRB = holder.YOURRADIOBUTTON
}