带图像的懒惰列表。如何取消线程?

时间:2010-10-01 07:38:16

标签: android listview lazy-loading

我从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

下载来源

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

刚刚放

adapter.imageLoader.stopThread();

到“取消”按钮点击处理程序

答案 1 :(得分:1)

您可以编写自己的自定义类来扩展Java Thread类。在那里你实现了一个停止线程本身的公共stop方法。当您创建并启动线程时,您可以保留对它的引用,并在取消按钮的OnClickEventHandler中调用public stop-method。