mutableStateListOf не выполняет рекомпозицию при замене какого-либо элемента в списке на targetdk 33 и kotlin 1.7.20
Перекомпоновка произойдет только тогда, когда вы измените сам список. mutableStateListOf может только уведомлять о добавлении, удалении или замене какого-либо элемента в списке.
Ссылка: Android Jetpack Compose mutableStateListOf не выполняет рекомпозицию
Основываясь на предыдущем предположении, рекомпозиция должна запускаться при вызове метода like() в приведенном ниже коде, и это происходило ранее. Но поскольку в моем коде есть обновленные версии, рекомпозиция не запускается при вызове метода like().
Я использую следующие версии в своем проекте и некоторые другие версии библиотеки, которые я обновил:-
val compilesdk = 33
val minsdk = 21
val targetsdk = 33
val kotlin = "1.7.20"
val compose_compiler = "1.4.0"
val compose_ui = "1.3.3"
val compose_runtime = "1.3.3"
val compose_foundation = "1.3.1"
val compose_material = "1.3.1"
ViewModel
val recipes = mutableStateListOf<Recipe>()
fun like(index: Int, likes: ArrayList<String>) {
recipes[index] = recipes[index].copy(likes = likes)
}
Составные
SocialNetworkContent(
viewModel.recipes,...
)
@Composable
fun SocialNetworkContent(
recipes: List<Recipe>,
...
){
..
items(
count = recipes.size,
itemContent = {
SocialListItem(
recipe = recipes[it],
it,
sharedPreferences,
viewModel,
onNavigateToRecipeDetailScreen,
onNavigateToUserProfileScreen
)
},
)
..
}
1 ответ
когда вам нужно изменить элемент состояния позиции вlazyColumn
илиlazyRow
, вам нужно добавитьkey
LazyColumn {
items(
items = messages,
key = { message ->
// Return a stable + unique key for the item
message.id
}
) { message ->
MessageRow(message)
}
}