listView 在利用ViewHolder后,据说提高了20%的性能,不管数据准不准确,确实的提高了.但是利用ViewHolder 的时候总会出现各种各样的问题
问题1:异步加载图片的时候,会出现图片显示错乱,
问题2:加载背景的时候,滑动过快,会出现条目错乱.
问题1解决方案:
我写一段伪代码,作为范例:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
View view = View.inflate(context,
R.layout.item_demo, null);
holder = new ViewHolder();
holder.imageView = view.(ImageView) view
.findViewById(R.id.imageView);// 图片id
view.setTag(holder);
} else {
view = covertView;
holder = view.getTag();
}
//list是,构造方法传来的图片url集合
holder.imageView.setTag(list.get(position).imageUrl);
if((String)holder.getTag()== list.get(position).imageUrl) {
//加载图片
}
return view;}class ViewHolder {ImageView imageView;}
问题2解决方案:
当我们想做出,一个listView,背景偶数,无背景,奇数有背景.
我们在判断的时候,千万不能用,position%2 ==1 或者 0 来判断,通过打印log,你会发现,position始终就是,0到 手机屏幕显示的条目数
判断应该通过全局的变量list来判断:(切记通过全局变量判断)
if (list.get(position).id % 2==1 ) {
holder.lout.setBackgroundColor(Color.parseColor("#FFFFFF"));
}
但是,你会发现当你快速滑动时,背景又出错了如图:
解决办法是:在背景选择时,一定记得else 加上:
if (list.get(position).id % 2==1 ) {
holder.lout.setBackgroundColor(Color.parseColor("#FFFFFF"));
}else {
holder.lout.setBackgroundColor(Color.parseColor("#D7D7D7"));
}
然后就正常了如图:
如果你觉得,解决了你问题,不要吝惜,点个赞吧.
参考自:点击打开链接