2015-10-08 6 views
9

Ich benutze eine RecyclerView, ich füge Artikel vor dem ersten Element, die Bildlaufposition bewegt sich bis zum ersten neu hinzugefügten Element. Wie kann ich meine Bildlaufposition beibehalten, nachdem ich neue Elemente zum ersten Index hinzugefügt und notifydatasetchange() aufgerufen habe?Wie in Scroll-Position in RecyclerView bleiben nach dem Hinzufügen von Elementen an seinem ersten Index und Anruf notifydatasetchange

das ist, was ich in meinem Adapter

mCurrentFragment.items.addAll(0, createLineItems(dataArrayList)); 

    notifyDataSetChanged(); 

Irgendwelche Vorschläge machen?

+0

Sie es von der ammount der Elemente berechnen können Sie eingefügt und Scroll-Wert manuell ok – filipproch

+0

ich es versuchen wird, thx – eddykordo

Antwort

20

Es gibt zwei Möglichkeiten:

  1. Verwenden Sie die anspruchsvollere Versionen von notify

    List newData = createLineItems(dataArrayList); 
    mCurrentFragment.items.addAll(0, newData); 
    notifyItemRangeInserted(0, newData.size()); 
    
  2. Verwendung stabil IDs. Auf Ihrem Adapter überschreiben public long getItemId (int position), damit es MEANINGFUL Werte zurückgibt und rufen Sie setHasStableIds(true); darauf an.

+0

erste Option für mich arbeitet, thx für die Hilfe – eddykordo

+0

@Budius Was meinst du mit MEANINGFUL? Bedeutet es eine eindeutige ID für jeden Artikel? –

+0

@ HamzehSoboh Ich meinte genau das. Wenn Ihre IDs nur die Position (zum Beispiel) sind, wird es nicht funktionieren. Es muss (zum Beispiel) die Benutzer-ID oder die Foto-ID sein. Wenn sich die Position der Ansicht ändert, bleibt die ID auf die Daten beschränkt. – Budius