2015-09-10 13 views
20

Tôi đang sử dụng Glide để tải hình ảnh và tôi đã thêm một người biết lắng nghe để biết khi nào tài nguyên sẵn sàng hoặc nếu có một lỗi của bất kỳ loại:Glide nghe không hoạt động

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

Ứng dụng không bao giờ chạy bên trong onResourceReady hoặc onException nhưng nếu tôi bỏ người nghe và để tải về async mà không có một gọi lại, nó chạy một cách chính xác:

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

tôi cũng đã cố gắng với GlideDrawableImageViewTarget thay vì nghe để nhận callbacks nhưng ứng dụng chạy bên onLoadStarted nhưng không bao giờ chạy insid e onLoadCleared, onLoadFailedonResourceReady.

+0

Bạn đang nói của người nghe onException và phương pháp onResourceReady không được gọi? Trả về true từ các phương thức đó sẽ ngăn không cho Target được gọi, nhưng chúng luôn được gọi cho người nghe bất kể. –

+0

Tôi nghĩ rằng bạn cần phải gọi 'gửi' để bắt đầu nó để bắt đầu tải –

Trả lời

21

Có vẻ như đó là lỗi với khả năng hiển thị của ImageView nếu nó không nhìn thấy được hoặc đã biến mất. Tôi đã mở một vấn đề ở đây: https://github.com/bumptech/glide/issues/618

1

Đã xảy ra sự cố tương tự. Có onResourceReady trả về false đã làm các trick cho tôi.

+0

có mã số ?? – styler1972

+0

@ styler1972 Tôi đã thêm mã của mình, nếu bạn muốn xem. Dường như làm việc tốt trong trường hợp của tôi. –

1

Dưới đây là một cách để làm điều đó:

 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 thật kỳ lạ, thêm .submit() dường như đã khắc phục được sự cố trên đầu của tôi. Bất cứ ý tưởng nào thay đổi được thực hiện mà nguyên nhân .load (...) để không còn làm việc trực tiếp? Các tài liệu được sắp xếp trống cho tôi. –

+0

Tôi nghĩ rằng bạn cần phải bắt đầu nó tại một số điểm, bởi vì không có một mục tiêu (hoặc chỉ nói với nó để làm điều đó), nó không biết khi nào để thực hiện các hoạt động. –

Các vấn đề liên quan