本篇内容介绍了“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()
返回的是继承自MutableState
的SnapshotMutableState
对象,路径mutableStateOf()-> createSnapshotMutableState() -> ParcelableSnapshotMutableState-> SnapshotMutableStateImpl
,可以看到有这样一段代码这里就是重点,SnapshotMu免费云主机域名tableStateImpl
的value
属性重写了get()
和set()
方法当value
被读的时候,不光把值返回,还会记录一下在哪被读的当value
被写的时候,不止把这个值给改了,还会去查找在哪里被读过,然后通知这些被读过的地方,通知UI
进行刷新因为我们操作String
、Int
等基础类型的时候,都是通过get
、set()
来获取、设置数据的,所以这操作会被SnapshotMutableStateImpl
记录下来,而List
、Map
这种集合,我们是通过add
、remove
来更新数据的,所以不会触发SnapshotMutableStateImpl
value
属性的set
。使用mutableStateListOf
替代mutableStateOf
,mutableStateListOf
内部对add
、remove
方法也进行了重写新创建一个List
,然后赋值给原来的list
,这样就会触发set
了我们也可以自己来实现一个mutableStateOf
,伪代码如下“AndroidComposeColumn列表不自动刷新问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!
本文小编为大家详细介绍“java报错找不到或无法加载主类如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“java报错找不到或无法加载主类如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。当我们在windows系统下安装完…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。