Possiedo un RecyclerView + LinearLayoutManger che utilizza un adattatore che contiene i messaggi di chat. Limito il numero di messaggi di chat al massimo 100 recenti. Questo problema è che quando rimuovo le chat più vecchie, la posizione di scorrimento delle chat nel recyclerview cambia perché l'indice 0 è stato rimosso. Ho iniziato a scrivere il codice seguente:Ricerca dell'offset superiore del primo oggetto visibile in un RecyclerView
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
View v = layoutManager.getChildAt(firstVisiblePosition);
if (firstVisiblePosition > 0 && v != null) {
int offsetTop = //need to get the view offset here;
chatAdapter.notifyDataSetChanged();
if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) {
layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop);
}
}
Ho pensato che sarebbe stato facile ottenere l'offset visibile della prima posizione dell'oggetto visibile. Ex. se la prima vista visibile è 300 dpi ma è visibile solo l'ultima 200 dpi, vorrei ottenere il 100 offset.
In questo modo è possibile utilizzare scrollToPositionWithOffset (firstVisiblePosition - 1, offsetTop).
Mi manca qualcosa qui? Sembra che sarebbe un problema facile da capire, ma non ho visto nessun metodo per supportarlo.
hai provato con 'v.getHeight() - v.getTop()' – Blackbelt
Lo esaminerò ulteriormente. Penso che v.getTop() ottenga la coordinata y dell'altezza di scroll totale, non relativa alla posizione del top del recyclerview stesso. – tylerjroach