Hi Carmen,

It was because of your post that I could implement the above code. I found
the links from your post itself. Thanks for the links and procedure.

Thanks,
Prajakta

On Sat, Apr 10, 2010 at 2:52 PM, Carmen Delessio
<[email protected]>wrote:

> I think this is a recurring topic.  Here is something I posted on it
> previously. I was looking for a recommended or consensus approach.
> Romain mentioned that his technique takes into consideration things like
> whether the list is scrolling or not.
>
> Here are 4 references that I have found for lazy-loading images into a
> listview in Android.
> The idea is to display a placeholder image, get the actual image in the
> background, update the ImageView in the list when the image is available.
>
> I've tried to do this in the simplest way possible using an AsyncTask in an
> Adapter.
> The outline of that approach is below.  Is it flawed?
> Is there an agreed approach to handling this common task?
>
> Thanks,
> Carmen
>
> http://blog.jteam.nl/2009/09/17/exploring-the-world-of-android-part-2/
> Tom van Zummeren
> http://evancharlton.com/thoughts/lazy-loading-images-in-a-listview/ Evan
> Charlton
> http://code.google.com/p/shelves/ from Romain Guy
> http://github.com/commonsguy/cwac-thumbnail from Mark Murphy
>
>
> Approach using AsyncTask within an Adapter
>
> Somewhere in the Adapter.
> Add info about the URL for the image to fetch to the ImageView.
> Execute an AsyncTask to get the image in the background and load the
> ImageView.
> AsyncTask uses the tag to fetch the image.
> It uses the tag to find the correct view within the ListView.
> ImageView imageViewByTag = (ImageView) myListView.findViewWithTag(
> tag);
> ImageView is updated.
>
> Somewhere in the Adapter:
>
> myImageView.setTag("http://someimage.jpg";); //
>             try {
>             new GetImage().execute(myImageView);
>             } catch(RejectedExecutionException e) { }
>
>
> // Asynctask
> private class GetImageInBackground extends AsyncTask<ImageView , ImageView
> , Long > {
>         Drawable drawable;
>         String tag;
>
>         @Override
>         protected void  onProgressUpdate  (ImageView... params){
>         if (drawable!=null){
>                   ImageView imageViewByTag = (ImageView)
> myListView.findViewWithTag(tag);  // find the ImageView
>                   if (imageViewByTag != null) {
>                       imageViewByTag.setImageDrawable(drawable); //update
> it
>                     }
>
>           }
>         }
>
>         @Override
>         protected Long doInBackground(ImageView... params) {
>             tag = (String) params[0].getTag(); // get the tag from the
> ImageView
>
>             if (tag==null){
>                 drawable = getPlaceholder(); // get a default drawable
>             }else{
>
>                 bm =getDrawablefromURL(String (tag); // a method to get
> drawable from a URL
>             }
>             publishProgress(params[0]);
>             return null;
>         }
>
>     }
>
>
>
> On Sat, Apr 10, 2010 at 3:10 PM, Prajakta Shitole <[email protected]>wrote:
>
>> I was able to resolve the issue, just made simple tweaks like removing the
>> drawableMap we just need the imageCache.
>>
>>
>> On Sat, Apr 10, 2010 at 10:51 AM, Prajakta Shitole 
>> <[email protected]>wrote:
>>
>>> Forgot to paste my code:-
>>>
>>> class IconicAdapter extends ArrayAdapter {
>>> Activity context;
>>> Context context2;
>>> HashMap<String,String> ret = new HashMap<String,String>();
>>> AsyncLoader async;// = new AsyncLoader();
>>> private ListView listView;
>>> HashMap<String,Bitmap> bit = new HashMap<String,Bitmap>();
>>>
>>>
>>> IconicAdapter(Activity context) {
>>>  super(context, R.layout.exclusive, items);
>>> this.context=context;
>>> async = new AsyncLoader();
>>>  }
>>>
>>> public View getView(final int position, View convertView,
>>> ViewGroup parent) {
>>>    View  row_inflated = View.inflate(context, R.layout.exclusive,null);
>>>      wrapper = new ViewWrapper(row_inflated);
>>>      row_inflated.setTag(wrapper);
>>>
>>> wrapper.getSongName().setText(items[position]);
>>>  wrapper.getSingerName().setText(singer_name[position]);
>>> final ImageView imgview = wrapper.getIcon();
>>>  imgview.setTag(myRemoteImages[position]);
>>> Bitmap cachedImage = async.loadDrawable(myRemoteImages[position], new
>>> ImageCallback() {
>>>     public void imageLoaded(Bitmap imageBitmap, String imageUrl) {
>>>        imgview.setImageBitmap(imageBitmap);
>>>             notifyDataSetChanged();
>>> }
>>>     });
>>> if(cachedImage!=null)
>>>     imgview.setImageBitmap(cachedImage);
>>> return(row_inflated);
>>> }
>>> }
>>>
>>>
>>> ======================================================================
>>> AsynLoader is as below:-
>>>
>>> public class AsyncLoader{
>>>  HashMap<String,Bitmap> bit = new HashMap<String,Bitmap>();
>>>  private HashMap<String, SoftReference<Bitmap>> imageCache;
>>> private HashMap<String, SoftReference<Bitmap>> drawableMap;
>>>   public AsyncLoader() {
>>>      drawableMap = new HashMap<String, SoftReference<Bitmap>>();
>>>      imageCache = new HashMap<String, SoftReference<Bitmap>>();
>>>     }
>>>  public Bitmap loadDrawable(final String imageUrl, final ImageCallback
>>> imageCallback) {
>>>      if (drawableMap.containsKey(imageUrl)) {
>>>             SoftReference<Bitmap> softReference =
>>> imageCache.get(imageUrl);
>>>             Bitmap drawable = softReference.get();
>>>             if (drawable != null) {
>>>                 return drawable;
>>>             }
>>>      }
>>>      final Handler handler = new Handler() {
>>>      @Override
>>>      public void handleMessage(Message message) {
>>>                 imageCallback.imageLoaded((Bitmap) message.obj,
>>> imageUrl);
>>>      }
>>>      };
>>>      new Thread() {
>>>      @Override
>>>      public void run() {
>>>                 Bitmap bitMap = loadImageFromUrl(imageUrl);
>>>                 imageCache.put(imageUrl, new
>>> SoftReference<Bitmap>(bitMap));
>>>                 Message message = handler.obtainMessage(0, bitMap);
>>>                 handler.sendMessage(message);
>>>      }
>>>      }.start();
>>>         return null;
>>>     }
>>>
>>>     public static Bitmap loadImageFromUrl(String url){
>>>
>>>
>>>      URL aURL;
>>>      Bitmap bitmap=null;//=this.bm;
>>>      try {
>>>  aURL = new URL(url);
>>> URLConnection conn;
>>> conn = aURL.openConnection();
>>>  conn.connect();
>>>   InputStream is= conn.getInputStream();
>>>   BufferedInputStream bis = new BufferedInputStream(is);
>>>      bitmap = BitmapFactory.decodeStream(bis);
>>>     // bitMap.put(p,bm);
>>>      bis.close();
>>>          is.close();
>>>
>>>
>>>  } catch (MalformedURLException e) {
>>>  e.printStackTrace();
>>>  } catch (IOException e) {
>>>  e.printStackTrace();
>>>  }
>>> return bitmap;
>>>     }
>>>
>>>     public interface ImageCallback {
>>>         public void imageLoaded(Bitmap imageBitmap, String imageUrl);
>>>     }
>>> }
>>>
>>>
>>> Thanks,
>>> Prajakta
>>>
>>>
>>>
>>> On Sat, Apr 10, 2010 at 10:21 AM, praj <[email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> I was trying to implement the lazy loading of images in the list view.
>>>> For implementing this i was referring to post by Tom van Zummeren.
>>>> (http://blog.jteam.nl/2009/09/17/exploring-the-world-of-android-
>>>> part-2/<http://blog.jteam.nl/2009/09/17/exploring-the-world-of-android-part-2/>),
>>>> but my images keep on changing in the list. Please can
>>>> anyone let me know if they were able to get this working properly
>>>> without having the images drawn again and again or let me know if I
>>>> have missed on anything or doing something wrong.
>>>>
>>>> Thanks,
>>>> Prajakta
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Android Developers" group.
>>>> To post to this group, send email to
>>>> [email protected]
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<android-developers%[email protected]>
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/android-developers?hl=en
>>>>
>>>> To unsubscribe, reply using "remove me" as the subject.
>>>>
>>>
>>>
>>  --
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]<android-developers%[email protected]>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>>
>
>
>
> --
> Carmen
> http://www.twitter.com/CarmenDelessio
> http://www.talkingandroid.com
> http://www.facebook.com/BFFPhoto
> http://www.twitter.com/DroidDrop
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]<android-developers%[email protected]>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to