2014-10-24 42 views
70

Czy istnieje sposób do nasłuchiwania zdarzeń z Picassa podczas korzystania z generatora jak:Jak słuchać zdarzeń uruchomionych w Picasso (Android)?

Picasso.with(getContext()).load(url).into(imageView);

Próbuję zadzwonić requestLayout() i invalidate() na rodzica GridView więc jej rozmiar prawidłowo, ale I don” t wiedzieć, jak ustawić detektor lub wywołanie zwrotne.

Widzę, że Picasso ma raportowanie zdarzeń błędów, ale czy zdarzenie jest udane?

Odpowiedz

214

Możesz użyć Callback, aby uzyskać zdarzenia Suction i onError. Wystarczy dodać nową oddzwanianie na żądanie tak:

Picasso.with(getContext()) 
    .load(url) 
    .into(imageView, new com.squareup.picasso.Callback() { 
         @Override 
         public void onSuccess() { 

         } 

         @Override 
         public void onError() { 

         } 
        }); 

Następnie można wykonywać żadnych zmian i modyfikacji w onSuccess zwrotnego.

+0

piękne! dzięki! – Prodikl

+1

Jak wyświetlić obraz błędu podczas wykonywania polecenia onError()? – Jas

+1

Użyj '.error (R.drawable.error_placeholder_image)' do ustawienia obrazu błędu – Raptor

24

Jeżeli chcesz mieć dostęp do bitmapy, zanim zostanie załadowany do widoku, użyj:

private Target target = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {  
     } 
     @Override 
     public void onBitmapFailed() { 
     } 
} 

w metodzie wywołującego:

Picasso.with(this).load("url").into(target); 

Idealnie chcesz zrealizować cel na widoku lub bezpośrednio wyświetlić obiekt posiadacza.

Nadzieja to pomaga

+0

Dzięki za napiwek! – Prodikl

6

Plac ostatnio został zaktualizowany klasy Target, a teraz, istnieje więcej sposobów, aby zastąpić (dodano onPrepareLoad i został zmieniony onBitmapFailed):

Target target = new Target() { 
    @Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
    } 

    @Override 
    public void onBitmapFailed(Drawable errorDrawable) { 

    } 

    @Override 
    public void onPrepareLoad(Drawable placeHolderDrawable) { 

    } 
}; 

A ty wciąż musi korzystać :

Picasso.with(context).load(url).into(target); 
5

Odpowiadając @Jas śledzić pytanie jako komentarz do odpowiedzi MrEngineer13 (ponieważ nie mam wystarczająco dużo reputacji wypowiedzenia w każdej odpowiedzi), należy zastosować metodę error() przed rejestracją Callback w sposobie into(), na przykład:

Picasso.with(getContext()) 
    .load(url) 
    .error(R.drawable.error_placeholder_image) 
    .into(imageView, new com.squareup.picasso.Callback() { 
     @Override 
     public void onSuccess() { 
      //Success image already loaded into the view 
     } 

     @Override 
     public void onError() { 
      //Error placeholder image already loaded into the view, do further handling of this situation here 
     } 
    } 
); 
2
private final Callback mImageCallback = new Callback() { 
     @Override 
     public void onSuccess() { 
      startPostponedEnterTransition(); 
     } 

     @Override 
     public void onError() { 
      startPostponedEnterTransition(); 
     } 
    }; 

RequestCreator creator = Picasso.with(getActivity()).load(list.get(position).getId()); 
creator.into(imageView, mImageCallback); 
0

Try This

 Picasso.with(context) 
      .load(services.get(position).getImageInactive()) 
      .into(holder.icon, new Callback() { 
       @Override 
       public void onSuccess() { 
        holder.imageLoad.setVisibility(View.GONE); 
       } 

       @Override 
       public void onError() { 
        holder.icon.setImageResource(R.drawable.ic_error_image_load); 
       } 
      }); 
Powiązane problemy