在自定义适配器的列表视图项中加载不同的图像

2024-02-05

您好,如果我在解释问题时有误,请原谅我。我有一个自定义基本适配器,其中有两个 imageView 和两个 TextView,我使用异步任务从 URL 设置图像。它会设置图像,但会自动再次更改图像。

下面是适配器的代码。

public class SharedPhotosAdapter extends BaseAdapter{

Context context;
LayoutInflater inflater;
public static ArrayList<HashMap<String, String>> data;
ImageLoader imageLoader;
private static final String BRANCH="Branch";
private static final String DATE="DateTime";
private static final String STARS="Stars";
private static final String IMAGE_URL="URL";
private static final String USER_NAME="UserName";
 TextView name,date,comment;
 ImageView pro_image,shared_image;

 public SharedPhotosAdapter(Context con,ArrayList<HashMap<String, String>> result) {
    // TODO Auto-generated constructor stub

     context=con;
     data=result;
     inflater = (LayoutInflater)context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     imageLoader=new ImageLoader(context);

}



@Override
public int getCount() {
    // TODO Auto-generated method stub
    return data.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View rowView, ViewGroup parent) {
    // TODO Auto-generated method stub

     ViewHolder holder;
     Bitmap bitmap=null;
     ImageView image = null;
     HashMap<String, String> result=data.get(position);
    if(rowView==null)
    {
        rowView=inflater.inflate(R.layout.shared_photos_item, null);
        holder=new ViewHolder();


    holder.name=(TextView)rowView.findViewById(R.id.textView1);
    holder.date=(TextView)rowView.findViewById(R.id.textView4);
    holder.comment=(TextView)rowView.findViewById(R.id.textView3);

    holder.pro_image=(ImageView)rowView.findViewById(R.id.imageView1);
    holder.shared_image=(ImageView)rowView.findViewById(R.id.imageView2);






    rowView.setTag(holder);


    }
    else
    {
        holder = (ViewHolder)rowView.getTag();

    }

    new DownloadImageTask(holder.shared_image).execute(result.get(IMAGE_URL));
    holder.name.setText(result.get(USER_NAME));
    holder.date.setText(result.get(DATE));
    holder.comment.setText(result.get(BRANCH));





    return rowView;
}



public class ViewHolder
{
     TextView name,date,comment;
     ImageView pro_image,shared_image;


}


}

这是我用来从 url 设置图像的异步任务

public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;

public DownloadImageTask(ImageView bmImage) {
    this.bmImage = bmImage;
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();

}

protected Bitmap doInBackground(String... urls) {
    String urldisplay = urls[0];
    Bitmap mIcon11 = null;
    try {
      InputStream in = new java.net.URL(urldisplay).openStream();
      mIcon11 = BitmapFactory.decodeStream(in);
    } catch (Exception e) {

    }
    return mIcon11;
}

@Override 
protected void onPostExecute(Bitmap result) {
    super.onPostExecute(result);

    bmImage.setImageBitmap(result);
 }
}

它随机将任何图像设置到图像视图只是无法弄清楚我哪里出错了。 一点点帮助将是显而易见的。

thanks


我建议你尝试一下Picasso http://square.github.io/picasso/消除下载图像/缓存等的麻烦。 将 jar 放入工作区后,您需要在适配器类的 getView() 方法中执行以下操作。

Picasso.with(context).load(result.get(IMAGE_URL)).into(holder.shared_image);

不需要 DownloadAsyncTask。 正如 @zapl 在评论中还建议的那样,还有其他库,如 Volley 和 UniversalImageLoader,但我喜欢 Picasso。您还可以使用 Picasso 提供的 Transformation 接口轻松应用圆形图像等变换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在自定义适配器的列表视图项中加载不同的图像 的相关文章

随机推荐