2012-02-20 41 views
2

我通过使用url从后台进程获取图像。要显示图像,我使用了BaseAdapter来显示list.l中的所有图像。我已将BaseAdapter添加到我的listView。我如何能使用网址下载图像到定制基adapeter?

我能够通过使用AsyncTask类的背景下载图像,这个类可以返回位图图像。

我已经实现MyCustome适配器类如下。

public class CustomeAdapter extends BaseAdapter { 
private static ArrayList<Message> searchArrayList; 

private LayoutInflater mInflater; 

public CustomeAdapter(Context context, ArrayList<Message> results) { 
    searchArrayList = results; 
    mInflater = LayoutInflater.from(context); 




} 

public int getCount() { 
    return searchArrayList.size(); 
} 

public Object getItem(int position) { 
    return searchArrayList.get(position); 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
    convertView = mInflater.inflate(R.layout.list, null); 
    holder = new ViewHolder(); 
    holder.personName = (TextView) convertView.findViewById(R.id.usrName); 
    holder.message = (TextView) convertView.findViewById(R.id.msgText); 
    holder.imgPerson = (ImageView) convertView.findViewById(R.id.personImg); 
    holder.msgImg = (ImageView) convertView.findViewById(R.id.msgImg); 

    convertView.setTag(holder); 
    } else { 
    holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.personName.setText(searchArrayList.get(position).getShoutUserFirstName()); 
    holder.message.setText(searchArrayList.get(position).getShoutMessageText()); 
    holder.msgImg.setImageResource(R.drawable.smile); 

    try{ 

    new DownloadImageTask(holder.imgPerson).execute("http://www.bwappstore.com/WebApps/ShoutImage/Image.ashx?UserID="+searchArrayList.get(position).getShoutUserID()); 

    } 
    catch (RejectedExecutionException e) { 
    e.printStackTrace(); 
} 
    return convertView; 
} 

static class ViewHolder { 
    TextView personName; 
    TextView message; 
ImageView imgPerson; 
ImageView msgImg; 

} 


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

     public DownloadImageTask(ImageView bmImage) { 
      this.bmImage = bmImage; 
     } 
     protected Bitmap doInBackground(String... urls) { 
      Bitmap bm = null; 
      try { 
       URL aURL = new URL(urls[0]); 
       URLConnection conn = aURL.openConnection(); 
       conn.connect(); 
       InputStream is = conn.getInputStream(); 
       BufferedInputStream bis = new BufferedInputStream(is); 
       bm = BitmapFactory.decodeStream(bis); 
       bis.close(); 
       is.close(); 
      } 
      catch (IOException e) { 
       Log.e("", "Error getting bitmap", e); 
      } 
      return bm; 
     } 

     protected void onPostExecute(Bitmap result) { 
      bmImage.setImageBitmap(result); 
     } 
} 

} 

从实现我可以下载的图片,我可以在列表视图中显示,但图像被改变,当我滚动这些都是不fixing.those被一而再,再而过载加载图像,但不加载相关的消息图像 如果一个图像再装它永远不会加载again.after一段时间只有一个图像列表

显示我怎么可以加载一个图像一次,然后在列表中显示? 请任何机构帮我

+2

这里是实现一个简单的演示[**的Android - ListView中的图像延迟加载**](http://stackoverflow.com/a/3068012/379693) – 2012-02-20 11:25:26

+0

是否有其他替代方式来获得? – 2012-02-20 11:47:57

+0

懒列表柠很难实现 – 2012-02-20 11:48:25

回答

1

的问题是在你的逻辑。

您正在执行适配器的getView方法中的下载图像任务,每次滚动列表时都会调用该方法。

因此,如果您的活动是ListActivity,请尝试在onStart方法中执行您的任务。那么这个问题就不会被看到。

1

这里的a nice library,它可以帮助你。笔者告诉记者,他对内存泄漏和性能的战斗。看看这个图书馆的开始。

相关问题