首页 > 代码库 > 异步加载图片错位问题
异步加载图片错位问题
============问题描述============
我写了一个公用的Adapter,问题是这样,原来每次加载结束之后 第一个item的图片总是不对。然后,我注释掉了 getView中的 if(converView == null),就可以了,但是这样每次都会重新创建一个item。所以性能肯定有影响。PS:我可是个正宗的菜鸟,非计算机专业的Java只懂一点点,所以大神们别用太多术语。谢谢啦~
那么贴一下代码~
package com.test.sztestagain.adapter; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.test.sztestagain.imageUitl.AsyncImageLoader; import com.test.sztestagain.imageUitl.CallBackImpl; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class MyListAdapter extends BaseAdapter { private LayoutInflater layoutInflater; private List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); private int resource; private AsyncImageLoader loader = new AsyncImageLoader(); private String[] text; private int[] id; private String image; private int imageId; public MyListAdapter(Context context, List<Map<String, Object>> list, int resource, String[] text, int[] id, String image, int imageId) { this.list = list; this.resource = resource; this.text = text; this.id = id; this.image = image; this.imageId = imageId; layoutInflater = LayoutInflater.from(context); } public MyListAdapter(Context context, List<Map<String, Object>> list, int resource, String[] text, int[] id) { this.list = list; this.resource = resource; this.text = text; this.id = id; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return this.list != null ? this.list.size() : 0; } @Override public Object getItem(int position) { return this.list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // if (convertView == null) { convertView = layoutInflater.inflate(resource, parent, false); // } if (image != null && !"".equals(image)) { ImageView imageView = (ImageView) convertView.findViewById(imageId); CallBackImpl callBackImpl = new CallBackImpl(imageView); Drawable cacheImage = loader.loadDrawable( list.get(position).get(image).toString(), callBackImpl); if (cacheImage != null) { imageView.setImageDrawable(cacheImage); } } for (int i = 0; i < id.length; i++) { TextView tv = (TextView) convertView.findViewById(id[i]); tv.setText(list.get(position).get(text[i]).toString()); } return convertView; } }
============解决方案1============
避免每次重复加载的方法思路:
将所有item都存放在数组中,并在数组中增加一项用于标志是否加载过的,0:未加载,1:加载,在getView里面每次判断这个标志的值,为0就重新加载,并将值改为1;为1则不加载。
异步加载图片错位问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。