Verwenden von notifyItemRemoved oder notifyDataSetChanged mit RecyclerView in Android

Ich bin erstellen einer Liste von Karten die Anzeige über die RecyclerView, wo jede Karte hat eine Schaltfläche, um entfernen Sie die Karte aus der Liste.

Wenn ich notifyItemRemoved() um die Karte zu entfernen, in der RecyclerView, es entfernt das Element und belebt feines, aber die Daten in der Liste wird nicht korrekt aktualisiert.

Wenn stattdessen wechsle ich die notifyDataSetChanged (), dann die Elemente in der Liste werden entfernt und ordnungsgemäß aktualisiert, aber dann werden die Karten dont animieren.

Hat jemand irgendeine Erfahrung mit der notifyItemRemoved() und wissen, warum es verhält sich anders als notifyDataSetChanged?

Hier einige peiece der code, den ich verwende:

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);
}
Kommentar zu dem Problem
versuchen notifyItemRemoved(index+1) Kommentarautor: pskink
Der index richtig ist. Wie gesagt funktioniert alles einwandfrei, wenn ich notifyDataSetChanged() anstatt..... Kommentarautor: revolutionary
haben Sie versucht, notifyItemRemoved(index+1)? Kommentarautor: pskink
Wow, mein genauen problem!!! Danke, spart mir die Mühe, das vereinfacht meinen code, um die Frage klar. Kommentarautor: Scott Biggs
Habe das gleiche problem, index+1 hat nicht funktioniert und die Range-Methode hat nicht funktioniert, auch. Kommentarautor: Jaeger

InformationsquelleAutor der Frage revolutionary | 2015-01-28

Schreibe einen Kommentar