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