0

インターネットからリストビューに画像のリストをロードしたい。各リスト項目には、テキストビュー (画像の URL) と画像ビューが含まれています。これは、画像をダウンロードしてリストビューにバインドするアダプター クラス コードです。しかし、画像は URL と一致しません。同じ画像 (ただし URL は異なる) を持つ行がいくつかあります。そして、いくつかの列はしばらくするとイメージが変わります。私を助けてください。

public class CustomAdapter extends BaseAdapter{

private Activity act;
private String imageUrlsArray[];
private LayoutInflater inflater;

public CustomAdapter(Activity activity, String imageUrls[]) {
    this.act = activity;
    this.imageUrlsArray = imageUrls;
    inflater = (LayoutInflater)this.act.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return imageUrlsArray.length;
}

@Override
public Object getItem(int arg0) {
    return null;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    View rowView = convertView;

    if (rowView == null) { 

        rowView = inflater.inflate(R.layout.list_row, parent, false);

        holder = new ViewHolder();
        holder.imageView = (ImageView)rowView.findViewById(R.id.imageViewInListRow);
        holder.urlTextView = (TextView)rowView.findViewById(R.id.textViewInListRow);


        rowView.setTag(holder);

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

    } 
    loadImage(holder.imageView, imageUrlsArray[position]);
    holder.urlTextView.setText(imageUrlsArray[position]);

    return rowView;
}

private void loadImage(ImageView iv, String url) {
    DownloadTask asyncTask = new DownloadTask();
    asyncTask.execute(iv, url);
}

class DownloadTask extends AsyncTask<Object,Object, Object>{
    private ImageView iv;
    private InputStream is = null;
    private Drawable imageDrawable = null;
    @Override
    protected Object doInBackground(Object... params) {
        iv = (ImageView) params[0];

        try {
            is  = new DefaultHttpClient().execute(new HttpPost(params[1].toString())).getEntity().getContent();
            imageDrawable = Drawable.createFromStream((InputStream)is , "src name");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return imageDrawable;
    }
    @Override
    protected void onPostExecute(Object response) {
        super.onPostExecute(response);
        if(response != null){
            iv.setImageDrawable((Drawable)response);
        } 


    }

}
static class ViewHolder{
    public TextView urlTextView;
    public ImageView imageView;
}

}

4

1 に答える 1