I think that's what I'm looking for. Can't wait to give it a try after work. Although, I have another thread in my main Activity downloading all pictures. Thanks, I will give it a try.
Ivan Soto Fernandez Web Developer http://ivansotof.com On Tue, Mar 24, 2009 at 8:37 AM, Streets Of Boston <flyingdutc...@gmail.com>wrote: > > Here is a code-snippet. I may not compile, but i think you'll get the > idea :-) > > [code] > ExecutorService EXECUTOR = Executors.newFixedThreadPool(3); // max 3 > worker threads. > ... > public View getView(final AbsListView listView, View convertView, int > pos, long id) { > > ... > ... > > final String imgUrl = ... > ... > final ImageView imgView = ... > ... > Bitmap bm = mBitmapCache.get(imgUrl); > if (bm != null) > imgView.setImageBitmap(bm); > else { > imgView.setTag(imgUrl); > FutureTask<?> task = EXECUTOR.submit(new Runnable() { > public void run() { > final Bitmap newBM = getImageFrom(imgUrl); // you have to > write this method > if (newBM == null) > return; > > // be sure that mBitmapCache is thread-safe. > mBitmapCache.put(imgUrl, newBM); > > // instead of 'listView', you could use a new Handler > instance. > listView.post(new Runnable() { > public void run() { > String checkUrl = (String)imgView.getTag(); > if (checkUrl != null && !checkUrl.equals(imgUrl)) > return; > > imgView.setImageBitmap(newBM); > } > }); > } > > private Bitmap getImageFrom(String url) { > // download the data from imgUrl. > // create a bitmap from it. > return bitMap; > } > }); > } > > // if you want, you can hold on to 'task' and call 'cancel' on it if > necessary, e.g. > // when this convertView is about to be re-used and to be assigned > to a different image. > return convertView; > } > [/code] > > On Mar 24, 10:13 am, Streets Of Boston <flyingdutc...@gmail.com> > wrote: > > I've done the same in my apps for ListView (whether they be in > > ListActivity or in a plain Activity) with good success. > > > > I use the java.util.concurrent's ExecutorService to obtain images: > > > > 1. Your getView(..) (or bindView/newView/etc) needs to assign an image/ > > thumbnail (bitmap) to an ImageView. But you don't have the bitmap yet. > > If you do have it (store in a limited size cache), just set it . > > 2. If not, obtain a FutureTask from the ExecutorService and this > > FutureTask then will download the image, create a thumbnail from it > > and creates a Bitmap from this thumbnail. Remember the id of the image > > (can be an id, Uri, URL, whatever, as long as it is unique) and assign > > it to the ImageView (setTag()). > > 3. When ready, the FutureTask will 'post' back to the main-thread that > > it has an new thumbnail. > > 4. On the 'post'-back, loop through the children of ListView, get the > > appropriate ImageView, the one whose tag (getTag()) is equal to the > > one that FutureTask you got the image for, assign the Bitmap to this > > ImageView. This is it. > > > > For myself I created a sub-system of ExecutorService and FutureTask, > > called 'Cancelable' tasks, which make it easier to cancel queued up > > tasks when they're no longer necessary. But this is an optimization. > > > > On Mar 24, 8:06 am, Mark Murphy <mmur...@commonsware.com> wrote: > > > > > > > > > Ivan Soto wrote: > > > > Do you have any article/tutorial about the placeholder images to > share? > > > > I'm trying to find one with no luck. > > > > > I have used the technique, but not in code I'm allowed to share. I do > > > need to more formally write this up at some point, but I do not have > > > anything immediately handy. > > > > > The gist of it is that you create your adapter and set it up, in > > > getView() or newView()/bindView() (depending on adapter choice), to see > > > if the thumbnail has been downloaded. If so, use it for the list row > > > being inflated/updated; if not, leave the ImageView in the row pointing > > > to some placeholder Drawable resource. This means as the user scrolls, > > > she will pick up the thumbnails. Also, at the end, you can quickly > > > iterate over the rows (ListView is a ViewGroup, IIRC, so there are > > > methods to iterate its children) and ensure each of those rows' > > > ImageViews are using their associated thumbnails. > > > > > -- > > > Mark Murphy (a Commons Guy)http://commonsware.com > > > Android App Developer Books:http://commonsware.com/books.html- Hide > quoted text - > > > > - Show quoted text - > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---