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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage