Как прокрутить до последней записи в LazyColumn, чтобы она отображалась вверху, а не внизу?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как прокрутить до последней записи в LazyColumn, чтобы она отображалась вверху, а не внизу?

Сообщение Anonymous »

Я создаю интерфейс чата в Jetpack Compose, используя LazyColumn.
Когда пользователь отправляет новое сообщение, я хочу, чтобы его последнее сообщение отображалось вверху, а более старые сообщения должны автоматически прокручиваться вверх.
Сейчас у меня есть это:

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

@Composable
fun ChatScreen() {
var message by remember { mutableStateOf("") }
val chatMessages = remember {
mutableStateListOf(
ChatbotMessage(content = "Hi there! How can I help you today?", isBot = true),
ChatbotMessage(content = "I need information about my account.", isBot = false),
ChatbotMessage(
content = "Sure, I can help with that. What specifically do you need to know?",
isBot = true,
),
ChatbotMessage(content = "What is my current balance?", isBot = false),
ChatbotMessage(content = "Your current balance is $1,234.56.", isBot = true),
ChatbotMessage(
content = "Thanks! Can you also show me my last 5 transactions?",
isBot = false,
),
ChatbotMessage(
content = "Of course. Here are your last 5 transactions...",
isBot = true,
),
ChatbotMessage(content = "Is there anything else?", isBot = true),
ChatbotMessage(content = "No, that's all for now. Thank you!", isBot = false),
ChatbotMessage(content = "You're welcome! Have a great day!", isBot = true),
)
}

val listState = rememberLazyListState()

Column(modifier = Modifier.fillMaxSize()) {
// Chat messages list
LazyColumn(
state = listState,
modifier = Modifier
.weight(1f)
.fillMaxWidth(),
contentPadding = PaddingValues(horizontal = 5.dp, vertical = 10.dp),
verticalArrangement = Arrangement.spacedBy(10.dp),
) {
items(chatMessages) { chatMessage ->
ChatBubble(
message = chatMessage,
modifier = Modifier.animateItem(),
)
}
}

// Input field and send button
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
OutlinedTextField(
value = message,
onValueChange = { message = it },
modifier = Modifier.weight(1f),
placeholder = { Text("Type a message...") },
singleLine = true,
)

IconButton(
onClick = {
if (message.isNotBlank()) {
chatMessages.add(ChatbotMessage(content = message, isBot = false))
message = ""
}
},
) {
Icon(
imageVector = Icons.AutoMirrored.Default.Send,
contentDescription = "Send",
tint = Color.Black,
)
}
}
}
}
Новые сообщения появляются внизу, а не вверху. Последнее сообщение не попадает наверх, потому что нет списка для прокрутки.
Новые сообщения, отправленные пользователями, появляются внизу, а не вверху. Я хочу, чтобы последнее сообщение было вверху, чтобы следующее сообщение чата было видно под ним; в противном случае пользователям придется прокручивать.
Что у меня есть и Что я хочу:
Изображение

Изображение

Я хочу что-то похожее на это:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/797 ... the-top-an
Ответить

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

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

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

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

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