2017-07-11 5 views
0

Ich habe eine RecyclerView mit Artikel, der nur RadioButton hält, mein Adapter erstellt RecyclerView mit einigen Positionen - kann 5-10 Positionen mit RadioButton in jeder Position sein. Aber diese RadioButtons befinden sich nicht in derselben RadioGroup, da sie sich alle in verschiedenen RecyclerView-Positionen befinden. Gibt es eine Möglichkeit, eine einzelne Auswahl dafür zu setzen?android - Single RadioButton in RecyclerView

PS: Ich fand diese Select only one radiobutton in a recyclerview, aber es ist alles über RadioGroups in RecyclerView-Positionen, ich habe nur RadioButtons.

Antwort

6

Sie können es verwalten, indem Sie eine Modellklasse mit einer boolean Variablen isChecked erstellen.

Wenn Sie eine RadioButton zuerst tun, wählen Sie isChecked = false für alle und dann für Ihre ausgewählte Schaltfläche und dann rufen Sie notifyDataSetChanged.

In Adapter verwenden

radioButton.setChecked(list.get(position).isChecked()) 

Es wird definitiv helfen.

+0

was ist, wenn wir mehr als 100 oder 1000 Artikel in der Liste haben. –

+1

Ja, ich habe es aber meine RecyclerView von ArrayList mit definierten ObjectModels darin erstellt. – Den

+0

@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 –

1

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);      

     }); 
    } 
}