2015-12-01 3 views
7

Ich habe einen RecyclerView + LinearLayoutManger, der einen Adapter verwendet, der Chatnachrichten enthält. Ich beschränke die Anzahl der Chat-Nachrichten auf die letzten 100. Dieses Problem tritt auf, wenn ich die älteren Chats lösche, ändert sich die Bildlaufposition der Chats in der Recycleransicht, weil Index 0 entfernt wurde. Ich fing an, den folgenden Code zu schreiben:Nach oben Versatz des ersten sichtbaren Gegenstandes in einem RecyclerView finden

Ich dachte, es wäre einfach, den sichtbaren Offset der ersten sichtbaren Position zu erhalten. Ex. Wenn die erste sichtbare Ansicht 300dp ist, aber nur die letzten 200dp sichtbar sind, möchte ich den Offset 100 bekommen.

So könnte ich scrollToPositionWithOffset (firstVisiblePosition - 1, OffsetTop) verwenden.

Fehle ich hier etwas? Das scheint ein leichtes Problem zu sein, aber ich habe keine Methoden gesehen, die dies unterstützen würden.

+1

haben Sie versuchen, mit 'v.getHeight() - v.getTop()' – Blackbelt

+0

ich in sie weiter suchen werde. Ich denke, v.getTop() bekommt die y-Koordinate der gesamten Scroll-Höhe, nicht relativ zum Ort der recyclerview top selbst. – tylerjroach

Antwort

8

@Blackbelt. Danke, dass Sie mich auf den richtigen Weg gebracht haben.

Der Offset, den ich brauchte, war eigentlich nur v.getTop();

Mein echtes Problem war in getChildAt(). Offenbar beginnt getChildAt an der ersten sichtbaren Position, nicht an der Position des Adapters. Die Dokumentation ist in diesem Fall schlecht geschrieben.

Hier ist der resultierende Code.

int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition(); 
View v = layoutManager.getChildAt(0); 
if (firstVisiblePosition > 0 && v != null) { 
    int offsetTop = v.getTop(); 
    chatAdapter.notifyDataSetChanged(); 

    if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) { 
     layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop); 
    } 
} 
+0

Sie können 'View v = layoutManager.findViewByPosition (position)' verwenden –

Verwandte Themen