Прокрутка до элемента lazyColumn с помощью ключа элемента, а не индекса элемента.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Прокрутка до элемента lazyColumn с помощью ключа элемента, а не индекса элемента.

Сообщение Anonymous »

Я создал сложную составную композицию lazyColumn, имитирующую карту (действительно, мне нужен список карточек, содержащий потенциально много элементов каждая, а вложение LazyColumn в карту невозможно (из-за того, что «был измерен компонент с вертикальной прокруткой» с бесконечными ограничениями максимальной высоты"). Итак, мой составной объект получает список элементов данных такого типа:

Код: Выделить всё

data class CardsState(val cards: ImmutableList)

data class Card(
val header: String,
val items: ImmutableList,
)
В LazyColumn для рисования одного CardItem может потребоваться несколько LazyListScope.item.
Пока все хорошо.
Но иногда мне нужно перейти к определенному элементу CardItem. К сожалению, я не могу использовать функцию LazyListState.animateScrollToItem(index: Int), поскольку она принимает индекс элемента в качестве параметра, и я не могу сказать, какой индекс элемента lazyColumn мне нужен, поскольку его может быть сложно вычислить.
Лучше всего для меня было бы иметь LazyListState.animateScrollToItem(key: Any), поскольку все мои элементы LazyColumn имеют уникальный ключ, который я могу передать в качестве параметра своему состоянию следующим образом:

Код: Выделить всё

interface CollectionItem {
val key: Any?
}

fun CollectionItem.makeKey(): String = buildString {
append(javaClass.name)
key?.let { append("_$it") }
}

data class CardsState(
val cards: ImmutableList,
val scrollToItemWithKey: Any?, // The key of the lazyColumn item I want to scroll to
)

data class Card(
val header: String,
val items: ImmutableList,
) : CollectionItem {
override val key: String = header
}

sealed class CardItem : CollectionItem {
data class CardItemTypeA(/* some parameters */) : CardItem()
data class CardItemTypeB(/* some others*/) : CardItem()
}

@Composable
fun MyContent(cardsState: CardsState) {
val scrollState = rememberLazyListState()
LazyColumn(state = scrollState) {
cardsState.cards.forEach { card ->
item(key = "${card.makeKey()}_top") { Spacer(modifier = Modifier.height(16.dp)) }
item(key = "${card.makeKey()}_header") { Header(card.header) }
items(items = card.items, key = { it.makeKey() }) {
when (it) {
is CardItem.CardItemTypeA -> ComposeCardItemTypeA()
is CardItem.CardItemTypeB -> ComposeCardItemTypeB()
}
item(key = "${card.makeKey()}_bottom") { CardBottomLayout() }
}
}
}
}
Но очевидно, что этого ScrollToItemWithKey не существует. Конечно, я мог бы «вычислить» lazycolumnIndex, зная, как он построен, но это делает мои вычисления, выполненные в ViewModel, зависимыми от способа построения представления на стороне создания, и это может быть сложно, особенно если я хочу добавить другие составные элементы. внутри моего основного LazyColumn. Есть ли другой способ добиться этой прокрутки?


Подробнее здесь: https://stackoverflow.com/questions/787 ... item-index
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Прокрутка до элемента lazyColumn с помощью ключа элемента, а не индекса элемента.
    Anonymous » » в форуме Android
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Вертикальная прокрутка lazyColumn очень медленная.
    Anonymous » » в форуме Android
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Вертикальная прокрутка lazyColumn очень медленная.
    Anonymous » » в форуме Android
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • ModalBottomSheet перехватывает, когда прокрутка LazyColumn останавливается
    Anonymous » » в форуме Android
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Jetpack Compose — прокрутка LazyColumn не работает при реализации пейджинга и быстрой прокрутки
    Anonymous » » в форуме Android
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»