您的位置:首页 > 其它

优化ListView使之滚动更平滑

2013-07-10 16:41 239 查看
相关资料:https://developer.android.com/training/improving-layouts/smooth-scrolling.html

/article/6914945.html

http://trinea.iteye.com/blog/1484894

http://android-developers.blogspot.com/2009/05/drawable-mutations.html

使用ListView时,由于adapter会频繁调用getView(),如果列表的数据比较多,就会出现ListView滚动不平滑的现象。

为了使ListView平滑滚动,列出一下几个要点:

要点一:

在调用getView( position, convertView, parent)时使用convertView,避免新建View;

要点二:

在声明ViewHolder时,应当声明成static嵌套类;

要点三:

XML布局时把ListView及其父控件的layout_height设成fill_parent或固定高度(不一定有效果);

要点四:

不要作复杂的逻辑处理,可以使用异步加载减少UI阻塞的可能。

要点五:

使用WeakHashMap。

WeakHashMap<Integer, View> weakMap= new WeakHashMap<Integer, View>();

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

if(weakMap.get(position)==null){

convertView = LayoutInflater.from(context).inflate(R.layout.item, null);

}

holder= new ViewHolder();

holder.age = (TextView) convertView.findViewById(R.id.age);

holder.name = (TextView) convertView.findViewById(R.id.name);

holder.age.setText(position+"");

holder.name.setText("name"+position);

convertView.setTag(holder);

weakMap.put(position, convertView);

}else{

convertView = weakMap.get(position);

holder = (ViewHolder) convertView.getTag();

}

return convertView;

}

由于WeakHashMap的特性,如果要对列表进行数据操作,例如读取item的id就会出问题。

要点六:

当需要适配的item view的高度不一样时,滚动条就会计算每个item的高度,比较耗资源,可以设置ListVIew的属性:

android:smoothScrollbar=“false”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: