Ich hatte das gleiche Problem. Nach der Antwort von Vishal Chhodwani schrieb ich die folgende Lösung in der Hoffnung, dass sie anderen Lesern helfen kann.
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);
});
}
}
was ist, wenn wir mehr als 100 oder 1000 Artikel in der Liste haben. –
Ja, ich habe es aber meine RecyclerView von ArrayList mit definierten ObjectModels darin erstellt. – Den
@SanjayMajoka wird es kein Problem geben, wenn es mehr als 100 Elemente hat. Dies ist der einfachste Weg, den Sie tun können. Es gibt eine andere Möglichkeit, die vorherige Ansicht zu behalten und sie vorher zu deaktivieren und die neue –