Обратный макет LazyColumn с ключом не работает - автоматическое прикрепление нового сообщения внизуAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Обратный макет LazyColumn с ключом не работает - автоматическое прикрепление нового сообщения внизу

Сообщение Anonymous »

Я использую Jetpack Compose и у меня есть LazyColumn для отображения сообщений чата. Макет расположен в обратном порядке (reverseLayout = true), поэтому новые сообщения появляются внизу. Однако когда я использую ключ для каждого элемента (на основе message.id), последнее сообщение не остается внизу, как ожидалось. Без использования ключа все работает нормально. Но когда я использую ключ, он застревает в сообщении в области просмотра, заполненном элементами, поэтому не прокручивается, я имею в виду, что новый элемент не внизу, чтобы переместить старый элемент вверх при использовании ключа.

@Composable
fun LazyColumnWithAddItemButton() {
// State to hold the list of messages (items)
val messages = remember { mutableStateListOf("Message 1", "Message 2", "Message 3") }

// LazyListState to track scroll position
val lazyListState = rememberLazyListState()

// Button click handler to add a new message
val addMessage = {
messages.add("Message ${messages.size + 1}")
}

// Box allows us to layer the LazyColumn and Button, with the button fixed at the bottom
Box(
modifier = Modifier.fillMaxSize()
) {
// LazyColumn with reverseLayout = true
LazyColumn(
state = lazyListState,
modifier = Modifier
.fillMaxWidth()
.padding(bottom = 72.dp) // Add padding to ensure button is not overlapped
.align(alignment = Alignment.BottomCenter),
contentPadding = PaddingValues(horizontal = 16.dp),
reverseLayout = true // Reverse layout so the first item is at the bottom
) {
items(messages.reversed(), key = {it}) { message ->
Text(
text = message,
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
.background(Color.LightGray)
.padding(16.dp)
)
}
}

// Button fixed at the bottom of the screen
Button(
onClick = {
addMessage() // Add new message to the list
},
modifier = Modifier
.fillMaxWidth()
.align(Alignment.BottomCenter) // Position button at the bottom
.padding(16.dp)
) {
Text("Add New Message")
}
}
}



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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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