Android 解决异步任务下载图片错位问题

本文介绍了一种通过为每个ImageView控件设置唯一标签来解决图片错位问题的方法,包括布局、下载图片和使用异步任务进行图片加载的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
* Description: 解决图片错位问题

  • Copyright (c) , 2016, Jansonxu
  • This program is protected by copyright laws.
  • Program Name:Person.java
  • Date: 2016年3月5日
  • @author 李阳
  • @version : 1.0
    */

    //核心步骤
    //① 解决图片错位问题原理无非就是,布局的每一个ImageView 控件
    // 设置一个唯一标签(通常采用url作为标签),图片下载完成后,
    // 根据url 获取控件,将图片设置给这个控件 方法一般写在doPostAc
    // tivity 中 ,采用接口回调可以写在调用异步任务的类中

// a) ImageView.setTag(url);
// b)ImageView = relativeLayout.findViewById(R.id.img_id);
// c) imageView.setImageBitmap(bitmap);

package com.example.adapter;

import java.util.List;

import com.example.cbk1.R;
import com.example.asynctask.DownTask;
import com.example.entity.CbkData;

import android.content.Context;
import android.graphics.Bitmap;
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 CbkDataAdapter extends BaseAdapter {

private Context context;
private List<CbkData> datas;

public CbkDataAdapter(Context context, List<CbkData> datas) {
    super();
    this.context = context;
    this.datas = datas;
}

@Override
public int getCount() {
    int count = 0;
    if(datas!=null)
        count = datas.size();
    return count;
}

@Override
public Object getItem(int position) {
    return datas.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, final ViewGroup parent) {
    if(convertView==null){
        convertView = LayoutInflater.from(context).inflate(R.layout.item_cbk, parent, false);
        ViewHolder holder = new ViewHolder();
        holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
        holder.text_title = (TextView) convertView.findViewById(R.id.text_title);
        holder.text_info = (TextView) convertView.findViewById(R.id.text_info);

        convertView.setTag(holder);
    }

    final ViewHolder holder = (ViewHolder) convertView.getTag();

    //当前要显示的数据
    CbkData cbkData = datas.get(position);
    String title = cbkData.getTitle();
    String source = cbkData.getSource();
    String create_time = cbkData.getCreate_time();
    String nickname = cbkData.getNickname();

    holder.text_title.setText(title);
    holder.text_info.setText(source+" "+nickname+" "+create_time);

    //获取图片路径
    String imageUrl = cbkData.getWap_thumb();
    holder.imageView.setTag(imageUrl);//解决图片错位的问题

    if(imageUrl.length()<=0)//判断图片路径的长度
        //隐藏ImageView
        holder.imageView.setVisibility(View.GONE);
    else
    {
        holder.imageView.setVisibility(View.VISIBLE);
        holder.imageView.setImageResource(R.drawable.ic_launcher);

        //使用异步任务下载图片
        new DownTask(DownTask.TYPE_IMAGE,new DownTask.DownBack() {
            @Override
            public void response(String url,Object obj) {
                //根据图片的url从ListView对象中查找ImageView
                ImageView imageView = (ImageView) parent.findViewWithTag(url);
                if(imageView!=null)
                    imageView.setImageBitmap((Bitmap)obj);
            }
        }).execute(imageUrl);

    }
    return convertView;
}

class ViewHolder
{
    ImageView imageView;
    TextView text_title,text_info;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值