在android中创建自己的Listener

时间:2014-01-06 09:54:39

标签: java android interface listener

我想在下面的班级中添加听众:

    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);
        }
    }
}

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

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

我在setListener中遇到错误:

  

方法setListener(new IAsyncFetchListener(){})未定义   类型Bitmap“如何解决?

2 个答案:

答案 0 :(得分:0)

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

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

但你可以这样做:

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

答案 1 :(得分:0)

将您的代码更改为以下内容:

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);
    }
});