[英]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.