android - 如何更新可组合函数内的 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 的适配器上观察它吗?
谢谢
解决方案
使用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 = {
在重组时被调用
推荐阅读
- python - .isin() 之后仍显示列值
- reactjs - 如何在 React Native 的 Flatlists 中只显示一个元素
- quarkus - 是否有可能从受保护的 Spring 云配置服务器加载属性?
- python - 平铺名称不显示,只有对象名称显示在 Django 管理员上
- git - Git 从另一个分支合并——3 种不同的方法——都可以正常工作吗?
- java - 控制器类中的@Autowired 服务 bean 无法识别方法
- python - 有没有办法在 pandas Dataframe 的另一列中的最后 n 行的基础上找到一行的值?
- python - 如何使用列表中的连接变量作为字符串参数
- c# - C# winform 中 Qt 小部件的使用
- android - Chromecast ExpandedControllerActivity 崩溃:尝试写入空对象引用上的字段 CastSeekBar