楼主所描述的是LogCat里显示的信息,对应的实际使用感受是,列表上下拖动的延迟很严重。
楼主所转的帖我看了,但经过我的实践操作的结果来看,采用固定View的layout_heigth属性的方法不能解决这个问题。
也许和版本有关,我使用的HTC G3 2.1版本作为修改平台,解决的策略是,减少getView() 方法的操作量,实际上是减少 inflate 的操作次数。
我采用的是对象池,先建立一个类变量 View[] views 用来保存列表中所有item的View.
假设变量objects 为ArrayAdapter中的 ArrayList 参数, 则在ArrayAdapter的构造方法中实例化views :
views = new View[objects.size()] ;
那么在getView() 方法中这样设置:
public View getView(int position, View convertView, ViewGroup parent) {
if ( view [ position ] != null ) {
return view[ position ] ;
}
// 其它初始化操作
return view[ position ] ;
}
这样当第1次阅读列表的时候可能会有点延迟,之后列表的滑动就很流畅了。原因就是像4楼说的那样,每次getView 都要做很多操作,对象的建立和销毁很占用资源。
希望大家以后多多采用对象池的方法。
楼主所转的帖我看了,但经过我的实践操作的结果来看,采用固定View的layout_heigth属性的方法不能解决这个问题。
也许和版本有关,我使用的HTC G3 2.1版本作为修改平台,解决的策略是,减少getView() 方法的操作量,实际上是减少 inflate 的操作次数。
我采用的是对象池,先建立一个类变量 View[] views 用来保存列表中所有item的View.
假设变量objects 为ArrayAdapter中的 ArrayList 参数, 则在ArrayAdapter的构造方法中实例化views :
views = new View[objects.size()] ;
那么在getView() 方法中这样设置:
public View getView(int position, View convertView, ViewGroup parent) {
if ( view [ position ] != null ) {
return view[ position ] ;
}
// 其它初始化操作
return view[ position ] ;
}
这样当第1次阅读列表的时候可能会有点延迟,之后列表的滑动就很流畅了。原因就是像4楼说的那样,每次getView 都要做很多操作,对象的建立和销毁很占用资源。
希望大家以后多多采用对象池的方法。