我在屏幕上有一个可组合的,它显示了跟踪项目(收藏夹)的列表:
var favourites: MutableList<Track> by mutableStateOf(mutableListOf())
@ExperimentalFoundationApi
@Composable
private fun ResultList(model: FreezerModel) {
with(model) {
if (favourites.isEmpty()) NoDataMessage("No favourites yet")
else {
LazyColumn(state = rememberLazyListState()) {
items(favourites) {
TrackCard(it, model)
}
}
}
}
}
单击事件时,我正在更新我的收藏夹列表(添加/删除项目)。如何使我的可组合物立即反映这些更改(例如重新绘制自身或类似内容)?到目前为止,它仅在我第一次切换到另一个屏幕时才有效。
感谢您的投入!
您需要使用可变状态列表
来自官方文档:
警告:使用可变对象,如 ArrayList
在代码使用
val favourites = remember { mutableStateListOf<Track>()}
而不是
var favourites: MutableList<Track> by mutableStateOf(mutableListOf())
只需从 lazyColumnFor
params 列表中删除状态 = 记住LazyListState()
应该适用于您的情况。
根据文档,如果我们使用 rememberLazyListState()
那么 :-
对提供的初始值的更改不会导致状态被重新创建或以任何方式更改(如果已创建)。
这样做之后,通常更新列表应该可以正常工作。此外,向可组合对象公开不可变列表(列表
)而不是可变列表
也是一种很好的做法。
例如使用:-
var favourites by mutableStateOf(listOf<FavoriteItem>())
然后使用添加/删除/更新
列表:-
favourites = favourites + newList // add
favourites = favourites.toMutableList().also { it.remove(item) } // remove