繁体   English   中英

在android中创建自己的监听器

[英]create own Listener in android

我想在下面的类中添加侦听器:

    class BitmapDisplay implements Runnable
    {
        IAsyncFetchListener fetchListener = null;
        public void setListener(IAsyncFetchListener listener) {
            this.fetchListener = listener;
        }
        Bitmap bitmap;
        BitmapToLoad bitmapToLoad;
        public BitmapDisplay(Bitmap b, BitmapToLoad p){bitmap=b;bitmapToLoad=p;}
        public void run()
        {
            if(bitmap!=null)
            returnbitmap=bitmap;
            else
            returnbitmap=BitmapFactory.decodeResource(context.getResources(), stub_id);

            this.fetchListener.onComplete(returnbitmap);
        }
    }
}

但是我的听众不会在日食中工作

imageLoader.DisplayBitmap("").setListener(new IAsyncFetchListener() {
    @Override
    public void onComplete(Bitmap bitmap) {
        photoView.setImageBitmap(bitmap);
    }
});

我在setListener中收到错误:

对于位图类型,未定义方法setListener(new IAsyncFetchListener(){})。如何解决?

因为当您执行imageLoader.DisplayBitmap("") ,方法DisplayBitmap("")返回一个Bitmap

您正在将方法DisplayBitmap与对象BitmapDisplay混合BitmapDisplay

但是您可以做到这一点:

BitmapDisplay bd=new BitmapDisplay(bmp, bitmapToLoad);
bd.setListener(new IAsyncFetchListener() {
            @Override
            public void onComplete(Bitmap bitmap) {
                photoView.setImageBitmap(bitmap);
            }
          }
);

将代码更改为以下内容:

DisplayBitmap函数

public Void DisplayBitmap(String url,IAsyncFetchListener listener)
{
    Bitmap bitmap=memoryCache.get(url);
    if(bitmap!=null)
        listener.onComplete(bitmap);
    else
    {
        queueBitmap(url,listener);
        listener.onComplete(BitmapFactory.decodeResource(context.getResources(), stub_id));
    }
}

queueBitmap函数

private void queueBitmap(String url,IAsyncFetchListener listener)
{
    BitmapToLoad p=new BitmapToLoad(url);
    executorService.submit(new BitmapsLoader(p,listener));
}

BitmapsLoader构造函数

 IAsyncFetchListener listener;
 BitmapsLoader(BitmapToLoad bitmapToLoad,IAsyncFetchListener listener){
        this.bitmapToLoad=bitmapToLoad;
        this.listener=listener;
 }

运行方式

    @Override
    public void run() {
        try{
            Bitmap bmp=getBitmap(bitmapToLoad.url);
            memoryCache.put(bitmapToLoad.url, bmp);
            BitmapDisplay bd=new BitmapDisplay(bmp, bitmapToLoad);
            bd.setListener(listener);
            handler.post(bd);
            }catch(Throwable th){
            th.printStackTrace();
        }
    }

最后调用:

imageLoader.DisplayBitmap("",new IAsyncFetchListener() {
    @Override
    public void onComplete(Bitmap bitmap) {
       photoView.setImageBitmap(bitmap);
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM