2014-01-06 5 views
0

я хочу, чтобы добавить слушателя в мой класс ниже:создать собственный прослушиватель в андроид

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 (новый IAsyncFetchListener() {}) не определен для типа Bitmap «как его решить?»

+0

мой интерфейс: открытый интерфейс IAsyncFetchListener { void onComplete (растровое изображение растрового изображения); } – user2790938

+0

проверить мои измененные ans Я думаю, он должен решить вашу проблему –

ответ

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

, но я удаляю возвращаемое значение из DisplayBitmap ("") не решает это ?! – user2790938

+0

Хорошо, ваш метод public Bitmap DisplayBitmap (String url); по-прежнему возвращать растровое изображение. Вы должны установить Listener в свой объект BitmapDisplay. – Andros

+0

BitmapDisplay не публикует мой класс только с DisplayBitmap (""), я хочу добавить слушателя на нем, пожалуйста, покажите мой код? – user2790938

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

метод Run

@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); 
    } 
}); 
+0

Вы используете только коды r Bitmap bitmap = memoryCache.get (url); if (bitmap! = Null) listener.onComplete (bitmap); и не отправляйте oncomplete в BitmapDisplay – user2790938

+0

Я думаю, что к тому времени, когда битмап загружен, ссылка на фото изменилась. –

+0

bitmapdisplay не посылает oncomplete whay? пожалуйста, помогите мне рассказать? – user2790938

Смежные вопросы