首页 > 解决方案 > 如何更新可组合函数内的 RecyclerView 的数据?

问题描述

我有一个RecyclerView通过该AndroidView函数创建并添加到我的撰写布局中。

@Composable
fun MyView(data: State<List<Item>>) {
   ...
   AndroidView(factory = { context ->
        RecyclerView(context).apply {
            layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
            layoutManager = LinearLayoutManager(context)
            adapter = ItemListAdapter().also { it.submitList(data.value) }
        }
    })
}

我使用RecyclerView而不是LazyColumn因为我想要添加和删除尚不支持的动画,LazyColumn我通过使用 RecyclerView 实现了这一点DiffUtil

现在,每次我data更改时,都会重新组合视图,因此重新创建 RecyclerView 并且不显示动画。

我可以实现这一目标的最佳方式是什么?我应该只传递一个 LiveData 然后在 RecyclerView 的适配器上观察它吗?

谢谢

标签: androidkotlinandroid-jetpack-compose

解决方案


使用update回调,每次重组都会调用它:

AndroidView(
    factory = { context ->
        RecyclerView(context).apply {
            layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
            layoutManager = LinearLayoutManager(context)
            adapter = ItemListAdapter().also { it.submitList().value }
        }
    },
    update = { recyclerView ->

    }
)

不知道为什么你在每次重组时都说“RecyclerView 被重新创建”,它不应该是这样的。我已经测试过,只update = {在重组时被调用


推荐阅读