Я нахожусь в постраничном списке и прокрутил довольно далеко от начала списка, скажем, более 30 страниц. На этом этапе я хотел бы иметь возможность прокручивать весь путь до начала без необходимости аннулировать мой PagingSource.
Когда я пытаюсь сделать это, вызывая lazyListState.animateScrollToItem(0)
, он просто переходит к 0-му элементу из представленных в данный момент элементов на пейджере, что является всего лишь 0-м элементом из представленных в данный момент элементов на пейджере.
Единственное, что я сделал, и оно вроде бы работает, но очень неудобно, это что-то глупое вроде этой
val knownFirstItem = database.getFirstItemWithoutPaging()
val getItemInfo = { lazyListState.layoutInfo.visibleItemsInfo.firstOrNull() }
if (getItemInfo() != null) {
do {
lazyListState.animateScrollToItem(0)
val itemInfo = getItemInfo()
} while (itemInfo != null && itemInfo.key != knownFirstItem?.id)
}
Оказывается, я неправильно размещал элементы в самом LazyColumn.
Мои элементы LazyColumn выглядели так:
items(...) { index ->
val item = lazyPagingItems[index]
if (item != null) {
UiForItem(item)
}
}
Но это означало, что для еще не загруженных элементов я ничего не рендерил. Так вот ленивая верстка не знала, как туда пролистать, так как там вообще ничего не было. Так что он прокручивался только до того, что мог. Изменение этого на
items(...) { index ->
val item = lazyPagingItems[index]
if (item != null) {
UiForItem(item)
} else {
SomePlaceholderWithAtLeast1dpSize()
}
}
Исправили это немедленно. Он прокручивается до 0, на короткое время показывает только заполнители, но сразу же после этого загружает элементы из БД.