zoukankan      html  css  js  c++  java
  • 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,这样能够优化程序的效率。

  • 相关阅读:
    JAVA面向对象初步知识总结:封装、继承、多态
    最短路径算法
    Retrofit源码分析(一)
    属性动画总结(纯搬运郭霖先生的文章)
    多项式相关算法模板
    二分图匹配问题
    一般图匹配
    三种上下界网络流模板
    最大流模板
    2017-2018 Petrozavodsk Winter Training Camp, Saratov SU Contest
  • 原文地址:https://www.cnblogs.com/1992monkey/p/5201907.html
Copyright © 2011-2022 走看看