У меня есть RecyclerView + LinearLayoutManger, который использует адаптер, который содержит сообщения чата. Я ограничиваю количество сообщений чата более 100 последних. Эта проблема заключается в том, что когда я удаляю старые чаты, позиция прокрутки чатов в recyclerview изменяется, потому что индекс 0 удален. Я начал писать код ниже:Поиск верхнего смещения первого видимого элемента в 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);
}
}
Я думал, что было бы легко получить видимое смещение первого видимого положения позиции. Ex. если первое видимое представление 300dp, но видно только последнее 200dp, я хотел бы получить 100 смещение.
Таким образом, я мог бы использовать scrollToPositionWithOffset (firstVisiblePosition - 1, offsetTop).
Я что-то упустил? Похоже, это было бы легкой проблемой для выяснения, но я не видел никаких методов, которые бы поддерживали это.
Вы пытались использовать 'v.getHeight() - v.getTop()' – Blackbelt
. Я изучу его дальше. Я думаю, что v.getTop() получает координату y общей высоты прокрутки, а не относительно местоположения самой вершины recyclerview. – tylerjroach