优化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”。
/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”。
相关文章推荐
- 优化ListView使之滚动更平滑
- android listView 滚动优化
- 【Win10】实现 ListViewBase 平滑滚动
- ListView异步加载图片方法和滚动优化
- android 4.2 MMS listVIew平滑滚动到列表最后一项的效果
- 平滑的滚动listview到一个指定位
- 【eoe资源】如何让Android ListView的平滑滚动
- ListView异步加载图片方法和滚动优化
- 提高ListView滚动的高效优化
- ListView优化-滚动状态停止加载网络图片
- 使ListView平滑流畅的滚动
- android平滑滚动特效-Android ListView
- ListView重写Adapter优化上下滚动响应速度
- 【eoe资源】如何让Android ListView的平滑滚动
- ListView优化-在滚动的时候不加载图片
- 【eoe资源】如何让Android ListView的平滑滚动
- ListView滚动优化
- 使用动画,Handler, ListView 优化, ListView滚动监听
- ScrollView嵌套ListView,GridView,ViewPager,以及这些控件自动滚动到底部问题的解决
- Android使用缓存优化ListView