#android #android-recyclerview #android-jetpack-compose #lazycolumn
Вопрос:
Как обновить, удалить или добавить элемент в LazyColumn
композицию в Jetpack ?
Чего легко достичь с помощью adapter.notifydatasetchange
или diffutils
в recyclerview
Ответ №1:
Просто сделайте именно это в коллекции, которую вы передаете в items
функцию. Все очень просто. Если ваш класс стабилен (просто используйте data class
), с вами все в порядке, он просто будет работать. Добро пожаловать в «Сочинение магии».
Если вы хотите добиться наилучшей производительности при обновлении/удалении/добавлении, затем укажите стабильный ключ в items
функции, см. Здесь более подробную информацию: https://developer.android.com/jetpack/compose/lists#item-keys
Пример:
@Composable
fun MessageList(messages: List<Message>) {
LazyColumn {
items(
items = messages,
key = { message ->
// Return a stable unique key for the item
message.id
}
) { message ->
// Display entry here
MessageRow(message)
}
}
}
Здесь, если вы укажете ключевую лямбду, составитель будет знать, что эта запись является одной и той же записью — просто с другим содержанием. Если вы не предоставите этот лямбда — индекс в списке, он будет использоваться в качестве ключа. Таким образом, любое добавление, кроме как в конце списка, вызовет множество перестановок. Так что это более или менее похоже на разные утилиты. Вам нужно только предоставить это, потому что равенство содержимого обрабатывается неявно — через equals
объект compose Message
.
Поэтому, если вы хотите удалить одно сообщение из списка — удалите его и передайте новый список MessageList
. С остальным я разберусь за вас