我从Fedor找到了这个例子Lazy load of images in ListView,这对我需要的东西来说绝对是好的。
我有一个问题。如果在“清除缓存”按钮旁边,会出现一个“取消”按钮。我如何在onClick上取消UI中的图像下载线程?
谢谢。
编辑: 我认为它已经实现了这个方法:
public void stopThread()
{
photoLoaderThread.interrupt();
}
但我不知道如何从UI线程访问它。在UI线程中,我只执行此操作:
adapter=new LazyAdapter(ctx, someString);
setListAdapter(adapter);
在LazyAdapter中:
public View getView(int position, View convertView, ViewGroup parent) {
...
imageLoader.DisplayImage(imagePath, activity, holder.image);
return vi;
}
和ImageLoader
public void DisplayImage(String url, Activity activity, ImageView imageView)
{
if(cache.containsKey(url))
imageView.setImageBitmap(cache.get(url));
else
{
queuePhoto(url, activity, imageView);
imageView.setImageResource(stub_id);
}
}
private void queuePhoto(String url, Activity activity, ImageView imageView)
{
//This ImageView may be used for other images before. So there may be some old tasks in the queue. We need to discard them.
photosQueue.Clean(imageView);
PhotoToLoad p=new PhotoToLoad(url, imageView);
synchronized(photosQueue.photosToLoad){
photosQueue.photosToLoad.push(p);
photosQueue.photosToLoad.notifyAll();
}
//start thread if it's not started yet
if(photoLoaderThread.getState()==Thread.State.NEW)
photoLoaderThread.start();
}
但我认为明确的方法是从link text
下载来源感谢您的帮助。
答案 0 :(得分:2)
刚刚放
adapter.imageLoader.stopThread();
到“取消”按钮点击处理程序
答案 1 :(得分:1)
您可以编写自己的自定义类来扩展Java Thread类。在那里你实现了一个停止线程本身的公共stop方法。当您创建并启动线程时,您可以保留对它的引用,并在取消按钮的OnClickEventHandler中调用public stop-method。