楼主所描述的是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 都要做很多操作,对象的建立和销毁很占用资源。
希望大家以后多多采用对象池的方法。
优化ListView滑动
本文针对LogCat提示的列表拖动延迟问题,通过减少getView()方法的操作量,特别是inflate调用次数来提高滑动流畅度。介绍了使用对象池方法的具体实现步骤。
105

被折叠的 条评论
为什么被折叠?



