相关疑难解决方法(0)

Jetpack Compose:列表更改时更新可组合项

我在屏幕上有一个可组合项,其中显示了跟踪项目(收藏夹)的列表:

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)

在点击事件中,我正在更新我的收藏夹列表(添加/删除项目)。如何让我的可组合项立即反映这些更改(例如重新绘制自身或类似的东西)?到目前为止,它仅在我第一次切换到另一个屏幕时才有效。

感谢您的投入!

android listview kotlin android-jetpack-compose

41
推荐指数
2
解决办法
6万
查看次数

LazyColumn 和可变列表 - 如何更新?

我是 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?

android-jetpack-compose

20
推荐指数
1
解决办法
2万
查看次数