个人记录1-解决listview异步加载图片错位,滑动listview错乱抖动的问题
来源:互联网 发布:淘宝竹筒粽子的竹筒 编辑:程序博客网 时间:2024/05/19 19:55
项目中遇到的问题记录1:
参考博客:
http://blog.csdn.net/cike110120/article/details/8976169
http://www.cnblogs.com/lesliefang/p/3619223.html (关于listview错位的原因分析)
为什么会出现图片错位的问题呢?一般是重用了convertView导致的。如果你重用了convertView,此时convertView中的ImageView的id值是相等的,而我们在设置ImageView的图片时,是根据id来设置的,此时就出现了图片错位问题。这里童鞋们可以自己去测试一下,不重用convertView,也就是每次getView的时候,都使用findViewById(R.id.xx)去得到每一个Item的ImageView,异步下载图片的方法也只是简单的开一个AsyncTask执行下载。在这种情况下,图片一般是不会产生错位的。原因很简单,认真读一读前面的内容就明白了。但是你如果真的在使用这种方法来使用getView的话,并且图片量比较大的时候,你程序的性能肯定不会好到哪里去了。因此,重用convertView还是很有必要的。
listview异步加载网络图片代码:
public class TaskListViewAdapter extends BaseAdapter {private Context context;private List<Map<String, Object>> Items;private LayoutInflater inflater;public Bitmap ImageBitmap = null;private ListView listview;// context:上下文参数// Items:list数据源集合// listview:使用该adapter的listview对象public TaskListViewAdapter(Context context, List<Map<String, Object>> Items, ListView listview) {this.context = context;this.Items = Items;this.listview = listview;}@Overridepublic int getCount() {return Items == null ? 0 : Items.size();}@Overridepublic Object getItem(int position) {return Items.get(position);}@Overridepublic long getItemId(int position) {return position;}/** * 为什么会出现图片错位的问题呢?一般是因为重用了convertView导致的。 * 如果你重用了convertView,此时convertView中imageview的id值是相等的, * 而我们在设置imageview的图片时,是根据id来进行设置的,此时就出现了图片错位 * 如果不使用convertView重用,那么每次getview的时候都要使用findViewById()去得到每个item的imageview * 异步下载图片的方法也只是简单的开了一个AsyncTask执行下载,这样虽然不会发生错位,但是性能会很差 * http://blog.csdn.net/cike110120/article/details/8976169 * http://www.cnblogs.com/lesliefang/p/3619223.html */@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// 解决图片错乱,乱闪的情况ViewHolder holder;Map<String, Object> Item = Items.get(position);inflater = LayoutInflater.from(context);if (convertView == null) {convertView = inflater.inflate(R.layout.tasklistview, null);holder = new ViewHolder();holder.PlantingCategory = (TextView) convertView.findViewById(R.id.PlantingCategory);holder.CompanyName = (TextView) convertView.findViewById(R.id.CompanyName);holder.PlantingRequirment = (TextView) convertView.findViewById(R.id.PlantingRequirment);holder.imageview = (ImageView) convertView.findViewById(R.id.imageview);// 设置图片的唯一标识// convertView的复用convertView.setTag(holder);} else {// findViewById的复用holder = (ViewHolder) convertView.getTag();}// 获得图片网址final String imagepath = new URLPATH().urlpath + "/Farm/" + Item.get("ImagePath");// TaskID唯一的标识final String TaskID = Item.get("TaskID") + "";Log.i("Log.i", "TaskListViewAdapter:imagepath:" + imagepath);// 设置图片的唯一标识holder.imageview.setTag(Item.get("TaskID"));holder.PlantingCategory.setText(Item.get("PlantingCategory") + "");// 任务要求holder.CompanyName.setText(Item.get("CompanyName") + "");// 公司名字holder.PlantingRequirment.setText(Item.get("PlantingRequirment") + "");// 种植要求// 异步加载网络图片// 耗时任务new AsyncTask<String, Void, Bitmap>() {// 下载图片@Overrideprotected Bitmap doInBackground(String... params) {// 使用网络连接类HttpClient类王城对网络数据的提取HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(params[0]);Bitmap bitmap = null;try {HttpResponse httpResponse = httpClient.execute(httpGet);// 请求成功if (httpResponse.getStatusLine().getStatusCode() == 200) {HttpEntity httpEntity = httpResponse.getEntity();byte[] data = EntityUtils.toByteArray(httpEntity);bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);} else {Log.i("Log.i", "请求图片资源失败!!!!");}} catch (Exception e) {// TODO: handle exception}return bitmap;}@Overridepublic void onPostExecute(Bitmap result) {if (result != null) {// 我们使用findViewWithTag(TaskID)// 来找到ListView中对应的ImagView,然后给该ImageView设置图片即可ImageView imageview = (ImageView) listview.findViewWithTag(TaskID);imageview.setImageBitmap(result);imageview.setTag("");}}}.execute(imagepath);return convertView;}static class ViewHolder {public TextView PlantingCategory;public TextView CompanyName;public TextView PlantingRequirment;public ImageView imageview;}/** * 添加数据列表项 * * @param newsitem */public void addNewItem(Map<String, Object> Item) {Items.add(Item);}}
1 0
- 个人记录1-解决listview异步加载图片错位,滑动listview错乱抖动的问题
- 解决ListView异步加载图片错乱问题
- 解决ListView异步加载图片错乱问题
- 解决ListView异步加载图片错乱问题
- 解决ListView异步加载图片错乱问题 .
- listview 加载图片错乱(错位)
- android开发中解决ListView异步加载图片错位问题
- 解决Android ListView中图片异步加载错位问题
- -------------解决Android ListView中图片异步加载错位问题
- Android ListView图片异步加载时,图片错位的问题
- Android ListView异步加载图片错位问题
- listView异步加载图片导致图片错位、闪烁、重复的问题的解决
- android listview 异步加载图片时出现图片错位、刷新问题的简单解决
- Android ListView 异步加载图片错位的问题
- Android ListView 异步加载图片错位的问题
- Android ListView 异步加载图片错位的问题
- android listview 加载图片错乱(错位)(2)
- android listview 加载图片错乱(错位)
- 单片机的学习方法
- java内存管理
- 怎样做老毛桃软件制作U盘启动盘和重新安装系统
- apt-get update错误信息
- 一个简爬取网页源文件的Demo
- 个人记录1-解决listview异步加载图片错位,滑动listview错乱抖动的问题
- 对于golang的goroutine并发处理任务时的理解
- String 初始化 equals ==
- bat 查看apk信息
- 文章出自http://blog.csdn.net/loongggdroid/article/details/17616509
- leetcode 198 House Robber
- Eclipse的使用小技巧和快捷键演示
- 算法竞赛入门经典(第2版)习题1-2详解
- 反思,今天总体感觉事情很简单,但项目比较多,没有掌握住很好的技巧,所以感觉很混乱