Android Compose Column列表不自动刷新问题如何解决


本篇内容介绍了“AndroidComposeColumn列表不自动刷新问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道,Compose可以使用mutableStateOf和UI进行绑定,改变值之后,就可以改变UI。效果如下但是如果是使用Column/Row/LazyColumn/LazyRow列表的时候,无论怎么更新数据,界面都不会刷新可以看到,点击了按钮后,列表完全没有刷新这是为什么了 ?当时很不解,为啥其他类型都是可以的,使用List就不行了呢 ?查阅了好久,终于找到了解决方案把mutableStateOf改用mutableStateListOf就可以了解决方案很简单,但是这是为什么呢 ?3.1 mutableStateOf为什么可以更新UI我们以mutableStateOf()这个为例首先,我们要明白,mutableStateOf()返回的是一个MutableState对象,MutableState中有一个var value: T属性查看mutableStateOf源码,可以发现,mutableStateOf()返回的是继承自MutableStateSnapshotMutableState对象,路径mutableStateOf()-> createSnapshotMutableState() -> ParcelableSnapshotMutableState-> SnapshotMutableStateImpl,可以看到有这样一段代码这里就是重点,SnapshotMu免费云主机域名tableStateImplvalue属性重写了get()set()方法当value被读的时候,不光把值返回,还会记录一下在哪被读的当value被写的时候,不止把这个值给改了,还会去查找在哪里被读过,然后通知这些被读过的地方,通知UI进行刷新因为我们操作StringInt等基础类型的时候,都是通过getset()来获取、设置数据的,所以这操作会被SnapshotMutableStateImpl记录下来,而ListMap这种集合,我们是通过addremove来更新数据的,所以不会触发SnapshotMutableStateImpl value属性的set。使用mutableStateListOf替代mutableStateOfmutableStateListOf内部对addremove方法也进行了重写新创建一个List,然后赋值给原来的list,这样就会触发set了我们也可以自己来实现一个mutableStateOf,伪代码如下“AndroidComposeColumn列表不自动刷新问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: java报错找不到或无法加载主类如何解决

本文小编为大家详细介绍“java报错找不到或无法加载主类如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“java报错找不到或无法加载主类如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。当我们在windows系统下安装完…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/09 10:08
Next 03/09 10:08

相关推荐