Android中一个关于ListView的奇怪问题

今天在做项目的时候发现了一个比较奇怪的问题,是关于ListView的,即ListView的android:height属性会影响程序中ListView的getView()方法的调用次数,如果设置ListView的android:height属性为0dp,同时设置android:weight=1,或者直接设置android:height属性为"wrap_content",那么ListView在展示数据的时候,getView()被执行的次数并不会是传入数据集合的size,而会比size的值大一些甚至大数倍,但是如果把ListView的android:height属性设置为match_parent的话,getView()被执行的次数就正好是传入数据集合的size。

那么此现象会对程序造成什么影响呢,我在做项目的过程中受到的影响是——如果ListView的android:height属性不为"match_parent"时,那么当ListView条目中有CheckBox需要根据数据自动被选中时,会造成错乱,而且每次重新进入此界面,ListView条目中CheckBox被选中的情况都是不一样的,我只是发现了这一种影响,但是我猜想还存在其它的一些影响。

通过在网上查阅了相关资料,对此种现象的解释大概是这样的:

我们一般都是将ListView的android:height属性设置为match_parent,这样就可以在程序中直接测量出ListView的实际高度,但是如果我们将高度属性设置为wrap_content,或者0dp(同时设置weight为1),则将导致ListView的实际高度无法测量,还需要一些计算才能确定ListView的实际高度,而在计算过程中会触发ListView的渲染,在渲染的时候getView()将会多次被调用,这样就导致getView()被调用的次数是传入数据集合大小的数倍。

因此在实际项目中,最好是把ListView的高度属性设置为match_parent,这样能够优化程序的效率。

posted @   三味码屋~  阅读(642)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示