2016-11-17 3 views
1

Checkbox wird zufällig in Recyclerview bei Verwendung notifyDatasetChange ausgewählt. Hier ist mein Code.Kontrollkästchen zufällig ausgewählt in Recyclerview bei Verwendung von notifyDatasetChange

public void onBindViewHolder(final ViewHolder holder, int position) {  
    SplitObject object=splitObjects.get(position); 
    holder.textView_memberName.setText(object.getMember_name()); 
    holder.textView_splitAmount.setText(amount/splitObjects.size()+""); 
    if(holder.checkBox.isChecked()) 
    { 
     Debug.e("checked"+position); 
    } 
    else 
    {  
     Debug.e("Unchecked"+position); 
    } 
    holder.checkBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      notifyDataSetChanged(); 
     } 
    });  
} 

Ich bin nicht in der Lage, um herauszufinden, warum notifyDataSetChanged Funktion nicht richtig arbeitet.

+0

ich denke, Sie müssen setOnCheckedChangeClientListener() für das nicht onClick() verwenden –

Antwort

3

Verwenden checkChangeListener statt OnClickListener

holder. checkBox.setOnCheckedChangeListener(null); 

    //if true, your checkbox will be selected, else unselected 
    holder.checkBox.setChecked(pass the boolean from your list); 

    holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       //set your object's last status 
       yourarrayobject.setSelected(isChecked); 
     } 
    }); 
+0

_pass die Boolean von Ihrer Liste_ welche Werte Ich muss übergeben –

+0

Sobald Sie das Kontrollkästchen seinen Status rechts ändert muss es in Ihrer Liste gespeichert werden, damit das Kontrollkästchen aktiviert bleibt, auch wenn Sie die Liste neu laden, so dass Sie den Status des Kontrollkästchens in Ihrer Liste speichern müssen (zunächst es wird für jedes Kontrollkästchen falsch sein) und es jedes Mal übergeben, wenn Sie die Liste laden, damit das zuvor ausgewählte Kontrollkästchen aktiviert bleibt. – SaravInfern

+0

Ich benutze List Datentyp und die Gruppenmitglieder Detail und Menge der Gruppe, die ich gleichmäßig im ausgewählten Mitglied teilen müssen. Standardmäßig ist alle Mitglied ausgewählt. Wenn Sie kein Mitglied markiert, dann wird es ausgewählte Mitglied zu teilen. Wenn möglich, bitte senden Sie mir einen Link oder Code –

0

Ihre notifyDataSetChanged() Bedürfnisse auf dem UI-Thread ausgeführt. Ich hatte ähnliche Probleme, wo der Adapter nicht richtig aktualisiert wurde. Tun Sie dies in Ihrem OnClickListener versuchen:

@Override 
public void onClick(View v) { 
    getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       notifyDataSetChanged(); 
      } 
     }); 
} 
1

denke ich, Kontrollkästchen aktiviert, wenn Sie die recyleview blättern, können Sie Viewholder Konzept gefallen, So fügen Sie viewHolder.CheckBox.setChecked(isItemChecked); zu onBindViewHolder und es wird funktionieren. Sie müssen isItemChecked durch Ihre Logik ersetzen, indem Sie den tatsächlichen Status für das Element an der Position abrufen ...

+0

Was ist isItemChecked –

+0

das ist booleschen Werten – Vadivel

Verwandte Themen