优化ListView使之滚动更平滑

相关资料:https://developer.android.com/training/improving-layouts/smooth-scrolling.html

 http://stephen830.iteye.com/blog/1141532

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”。


你可能感兴趣的:(xml,优化,android,ListView,layout,null)