今天在做项目的时候发现了一个比较奇怪的问题,是关于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,这样能够优化程序的效率。

更多相关文章

  1. Android中布局属性(如android:drawableBottom等)的作用总结
  2. Android属性大全之shape
  3. Android中TextView的相应属性
  4. Android 操作SQLite数据库之一
  5. Android布局之LinearLayout与RelativeLayout的属性
  6. android自定义属性的使用
  7. Android 中的数据库 SQLite
  8. Windows Phone 7 不温不火学习之《ListBox 数据与Android ListVi

随机推荐

  1. Android(安卓)MTK 修改TP参数
  2. android Studio 引用fresco 出现的问题
  3. Android Edittext设置负数以及小数
  4. TextView添加ClickableSpan和LinkMovemen
  5. Android的唤醒锁和键盘锁
  6. Android(安卓)sqlit java层源码分析
  7. android问题(1)
  8. Android(安卓)ExpandableListActivity 学
  9. TextView控件
  10. Flutter 透明状态栏及字体颜色的设置方法