Ключи для стабильных быстрых списков
Помогите Compose отслеживать элементы при изменениях.
«Ключи для стабильных быстрых списков» — бесплатный урок Jetpack Compose Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Jetpack Compose Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Jetpack Compose Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
How Compose Tracks Rows
By default, Compose identifies each row by its position in the list. Item zero is item zero, item one is item one, and so on.
Position Breaks on Change
When you insert or remove a row, every item below shifts position. Compose now thinks those rows are different and rebuilds them needlessly.
The Cost of Confusion
Rebuilt rows lose their state and animations. A removed item can make the whole list flicker as Compose reshuffles everything below it.
Give Each Item a Key
A key is a stable, unique value that names each item by identity, not position. Then Compose follows items even as they move.
items(users, key = { it.id }) { user ->
Text(user.name)
}Use a Real Unique ID
The best key is a true unique id from your data, like a database id. It stays the same no matter where the item sits.
Keys Must Be Unique
Every key in the list must be different. Duplicate keys throw a runtime error, so never key items by a value two rows might share.
Don't Key by Index
Using the index as a key defeats the purpose, since indexes shift just like position. Reach for it only when you truly have no id.
State Stays With the Item
With stable keys, a row's remembered state travels with it. A checkbox stays checked even after items above it are deleted.
Keys Power Animations
Stable keys let Compose animate items moving, appearing, or leaving. Without them, it can't tell a move from a rebuild.
items(items, key = { it.id }) { item ->
Text(item.label, Modifier.animateItem())
}itemsIndexed Takes Keys Too
The itemsIndexed builder also accepts a key lambda. You still get the index, plus stable identity for every row.
itemsIndexed(data, key = { _, item -> item.id }) { i, item ->
Text("$i: ${item.name}")
}Keys Are Almost Always Worth It
For any list that can change, adding keys is a tiny effort with a big payoff: correct state, smooth animations, and fewer rebuilds.
Quick Check
What makes a good list key?
Recap: Stable Keys, Stable Lists
Keys give items identity beyond position. Use a real unique id, keep keys unique, and your state and animations just work. ✨
Часто задаваемые вопросы
Урок «Ключи для стабильных быстрых списков» бесплатный?
Да — полный текст урока «Ключи для стабильных быстрых списков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Jetpack Compose Academy, подпишись на CoddyKit PRO. Курс Jetpack Compose Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ключи для стабильных быстрых списков»?
Помогите Compose отслеживать элементы при изменениях. Ты практикуешь Jetpack Compose Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Jetpack Compose Academy?
Предыдущий опыт не требуется. Jetpack Compose Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ключи для стабильных быстрых списков»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Jetpack Compose Academy?
Да. Каждый урок Jetpack Compose Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- LazyColumn и прокручиваемый Column
- items и itemsIndexed
- Ключи для стабильных быстрых списков
- Закреплённые заголовки и списки разделов