今天遇到了一个很尬的问题,就是listview的Item中存在一个倒计时的自定义TextView控件,每隔一秒进行设置文本操作,结果导致列表卡顿,打日志发现频繁的调用getView方法,这是怎么回事呢?初步定位是这个TextView更新文本导致的,就先写注释到设置文本操作,结果果然就不频繁调用了,难道是这个TextView问题但始终没发现这个控件有什么问题,重新屡一下思路,listview宽高改变的时候会调用getView,发现listView宽高都是match_parent不涉及重新计算问题啊,就继续一层层排查查看父布局,发现如下:
难道是这里为了满足在mHeaderBar下面并填充父控件而设置成layout_height=“0dp”导致的,将根修改成相对布局将layout_height=“match_parent”,结果发现问题不发生了
总结:listView中item存在动态更新时尽量将listview及每层的父控件设置固定值或match_parent,如果布局复杂就代码动态给listView设置固定高度,从而避免listview重新计算宽高而导致频繁调用getView方法