2015-09-10 23 views
20

Używam Glide załadować obrazy i dodałem słuchacza wiedzieć, kiedy zasób jest gotowy lub jeśli wystąpił błąd dowolnego typu:Glide słuchacz nie działa

Glide.with(mContext) 
    .load(url) 
    .placeholder(R.drawable.glide_placeholder) 
    // use dontAnimate and not crossFade to avoid a bug with custom views 
    .dontAnimate() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .listener(new RequestListener<String, GlideDrawable>() { 
     @Override 
     public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
      // do something 
      return true; 
     } 

     @Override 
     public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
      // do something 
      return true; 
     } 
    }) 
    .into(mCustomImageView); 

Aplikacja nie działa wewnątrz onResourceReady lub onException ale jeśli usunąć słuchacza i niech pobieranie asynchronicznej bez wywołania zwrotnego, to działa prawidłowo:

Glide.with(mContext) 
    .load(url) 
    .placeholder(R.drawable.glide_placeholder) 
    // use dontAnimate and not crossFade to avoid a bug with custom views 
    .dontAnimate() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .into(mCustomImageView); 

próbowałem też z GlideDrawableImageViewTarget zamiast słuchacza do odbierania wywołań zwrotnych, ale aplikacja jest uruchamiana wewnątrz onLoadStarted ale nigdy nie skończy insid e onLoadCleared, onLoadFailed i onResourceReady.

+0

Mówisz słuchacza onException i metody onResourceReady nie nazywa? Zwrócenie wartości true z tych metod uniemożliwi wywołanie Target, ale powinny one zawsze być wywoływane dla detektora niezależnie. –

+0

Myślę, że musisz wywołać 'submit' w celu zainicjowania go, aby rozpocząć ładowanie –

Odpowiedz

1

Zrobiono ten sam problem. Po zwracaniu wartości false onResourceReady zrobił mi to.

+0

ma kody? – styler1972

+0

@ styler1972 Dodałem mój kod, jeśli chcesz wyglądać. Wydaje się, że działa dobrze na moim przypadku. –

1

Oto jeden ze sposobów, aby to zrobić:

 Glide.with(context).load(...) 
       .listener(object : RequestListener<Drawable> { 
        override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean { 
         //TODO handle error images while loading photo 
         return true 
        } 

        override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { 
         //TODO use "resource" as the photo for your ImageView 
         return true 
        } 

       }).submit() 
+0

Huh to dziwne, ale dodanie .submit() prawdopodobnie rozwiązało problem po mojej stronie. Czy wiesz, jaką zmianę wprowadzono, powodując, że .load (...) nie działa już bezpośrednio? Dokumenty są dla mnie puste. –

+0

Myślę, że musisz go zainicjować w pewnym momencie, ponieważ bez celu (lub po prostu mówiąc, żeby to zrobić), nie wie, kiedy wykonać operację. –