1. 优化BaseAdapter的getView()方法
1.1合理使用convertView,先判断拿到的convertView是否为空值(一般第一次都是空值),如果不是空值就拿过来直接使用,这样走getView()的时候不用每次都去new 一个view
1.2 使用viewHolder来保存findViewById得到的控件,当第一次拿到convertView时,将findViewById得到的控件保存到viewHolder里面,使用view.setTag()方法将viewHolder保存到view中,以后拿到不是空值的convertView的时候直接从viewHolder里面拿控件就可以了,这样在走getView()时,不必每次都findViewById,这种以空间换时间的做法可以提高性能。
示例代码如下:
class ViewHolder{
ImageView p_w_picpathView;
TextView textView;
}
然后在getView()里:
View view = convertView;
ViewHolder viewHolder;
If(view == null){
View = LayoutFlater.from(context).inflate(R.layout........, null);
viewHolder = new ViewHolder();
viewHolder.p_w_picpathView = (ImageView)view.findViewById(R.id......);
viewHolder.textView = (TextView)view.findViewById(R.id................);
view.setTag(viewHolder);
}else{
viewHolder = view.getTag();
}
ViewHolder.p_w_picpathView.setImageBitmap(.....);
ViewHolder.textView.setText(.....);
Return view;
2.如果listView需要加载大量的图片,则需要加入缓存池即LruCache.
3.当用户在用手势滑动listView的时候,判断用户的手势类型,如果是非常快的滑动则listView不加载任何东西只是设置一张默认的图片,当滑动停止的时候加载相应位置的信息,因为一般情况下用户在快速滑动的时候不会看内容,所以我们只需要在滑动停止的时候加载内容即可。这样可以大幅度提升listView的性能。
转载于:https://blog.51cto.com/plutus168/1210371