- делается подгрузка данных, данные вставляются в конец списка, но нужно чтобы позиция скролла осталась на fistVisibleIndex до подргузки новой порции данных, то есть, мы прокрутили вниз, догрузились данные, но скролл остался на текущем месте.
Это делается с помощью АПИ списков или надо самому в коде вычислять последную позицию запоминать ее и потом вручную сроллить?
Попробовал такой код:
LazyColumn(
state = listState,
content = {
itemsIndexed(
items = listOfData,
key = {index, item ->
val id = Integer.parseInt(item.replace("Item ", ""))
Log.d("RowsList", "id $id")
id
}
) { index, item ->
val isSelected = selectedIndex == index
RowItem(
isSelected = isSelected,
data = item,
onSelected = {
onSelected(index)
},
)
}
}
)
Пояснение - в списке хранятся строки Item №. В блоке
key = {index, item ->
val id = Integer.parseInt(item.replace("Item ", ""))
Log.d("RowsList", "id $id")
id
}
выдаю id для элемента списка. Как я понял, если задать id, то позиция должна сохараняться автоматически при дозагрузке данных
Вы делаете пагинацию вручную? Может стоит посмотреть в сторону paging-compose?
не, я хочу сделать вручную
поидее так должно работать, да. причем вы ведь всегда элементы в конец списка добавляете? то есть индекс в списке для ожидаемого первого видимого элемента не меняется, в таком случае я ожидаю что это даже без указания key должно работать. можете написать в личку если есть возможность поделиться большим количеством деталей
вроде разобрался - нужно было состояние списка вынести вверх
А принципиально именно mutableStateListOf?
Обсуждают сегодня