Эквивалентно adapter.notifydatasetchange или Diffutils в Jetpack Составляют ленивый столбец/строку

#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 . С остальным я разберусь за вас