Ich erstelle eine Liste von Karten, die mit RecyclerView angezeigt werden sollen. Jede Karte verfügt über eine Schaltfläche zum Entfernen dieser Karte aus der Liste.
Wenn ich notifyItemRemoved () verwende , um die Karte in der RecyclerView zu entfernen, wird das Element entfernt und animiert, aber die Daten in der Liste werden nicht korrekt aktualisiert.
Wenn ich stattdessen zu notifyDataSetChanged () wechsle, werden die Elemente in der Liste entfernt und korrekt aktualisiert, aber dann werden die Karten nicht animiert.
Hat jemand Erfahrung mit der Verwendung von notifyItemRemoved () und weiß, warum es sich anders verhält als notifyDataSetChanged?
Hier ist ein Stück Code, den ich benutze:
private List<DetectedIssue> issues = new ArrayList<DetectedIssue>();
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
if(position >0){
RiskViewHolder riskHolder = (RiskViewHolder)holder;
final int index = position - 1;
final DetectedIssue anIssue = issues.get(index);
riskHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int index = issues.indexOf(anIssue);
issues.remove(anIssue);
notifyItemRemoved(index);
//notifyDataSetChanged();
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
}
@Override
public int getItemCount() {
return (issues.size()+1);
}