我在屏幕上有一个可组合项,其中显示了跟踪项目(收藏夹)的列表:
var favourites: MutableList<Track> by mutableStateOf(mutableListOf())
Run Code Online (Sandbox Code Playgroud)
@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)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在点击事件中,我正在更新我的收藏夹列表(添加/删除项目)。如何让我的可组合项立即反映这些更改(例如重新绘制自身或类似的东西)?到目前为止,它仅在我第一次切换到另一个屏幕时才有效。
感谢您的投入!
我是 Jetpack Compose 的新手,我花了几个小时来了解如何使 LazyColumn 更新我更新列表的内容。我读过它需要是一个不可变的列表来更新 LazyColumn,但我似乎无法让它工作。
代码如下:
@Composable
fun CreateList() {
var myList : List<DailyItem> by remember { mutableStateOf(listOf())}
myList = getDailyItemList() // Returns a List<DailyItem> with latest values and uses mutable list internally
// Function to refresh the list
val onUpdateClick = {
// Do something that updates the list
...
// Get the updated list to trigger a recompose
myList = getDailyItemList()
}
// Create the lazy column
...
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几件事,或者是点击更新按钮时列表从未更新,或者仅更新了第一个项目,但列表中的其余项目没有更新。我查看了文档,上面写着这一点,但我不明白:
我们建议您使用可观察的数据持有者,例如 State<List> 和不可变的 listOf(),而不是使用不可观察的可变对象。
如何更新列表以便更新 LazyColumn?