Android Elemente in RecyclerView hinzufügen / ersetzen
Ich weiß, dass es bereits viele Themen zu diesem Thema gibt, aber keine der angegebenen Lösungen hat bisher für mich funktioniert. Ich versuche, ein Element eines @ hinzuzufügen oder zu aktualisiereRecyclerView
. Hier ist mein Code:
Hauptaktivitä
private MyListItemAdapter mAdapter;
private RecyclerView recyclerView;
// called on activity create
private void init() {
// initialize activity, load items, etc ...
mAdapter = new MyListItemAdapter(this, items);
recyclerView.setAdapter(mAdapter);
}
// called when I want to replace an item
private void updateItem(final Item newItem, final int pos) {
mAdapter.replaceItem(newItem, pos);
}
MyListItemAdapter
public class MyListItemAdapter extends RecyclerView.Adapter<MyListItemAdapter.MyListItemViewHolder> {
private List<Item> mItems;
public void replaceItem(final Item newItem, final int pos) {
mItems.remove(position);
mItems.add(position, newItem);
notifyItemChanged(position);
notifyDataSetChanged();
}
}
Ich habe versucht, diese Änderungen von derMainActivity
auch, aber in jedem Fall habe ich versucht, meine Liste wird nicht aktualisiert. Das hat nur funktioniert, als ich den Adapter auf den recyclerView zurückgesetzt habe:
mAdapter.notifyDataSetChanged();
recyclerView.setAdapter(mAdapter);
was natürlich eine schlechte idee ist. (Abgesehen von den schlechten Nebenwirkungen würde es nicht einmal funktionieren, wenn ich Lazy Loading für meine Listen verwende.)
Also meine Frage ist, wie kann ich @ machnotifyDataSetChanged()
richtig arbeiten?
bearbeite
Ich habe eine Lösung zum Ersetzen von Artikeln gefunden. NachmAdapter.replaceItem(newItem, pos);
Ich musste @ anrufrecyclerView.removeViewAt(position);
Dies funktioniert zum Ersetzen eines Elements, löst jedoch nicht mein Problem, wenn ich Elemente (z. B. verzögertes Laden) zu meiner Liste hinzufügen möchte.
edit2
Ich habe eine funktionierende Lösung zum Hinzufügen von Artikeln gefunden
Adapter
public void addItem(final Item newItem) {
mItems.add(newItem);
notifyDataSetChanged();
}
Aktivität
private void addItem(final Item newItem) {
mAdapter.addItem(newItem);
recyclerView.removeViewAt(0); // without this line nothing happens
}
Aus irgendeinem Grund funktioniert dies (auch: Die Ansicht an Position 0 wird nicht entfernt), aber ich bin mir sicher, dass dies nicht die richtige Methode ist, um einem RecyclerView Elemente hinzuzufügen.