2017-02-02 15 views
0

グリッドビューを使用しています。グリッドでは、各アイテムには、最初の場所に新しいアイテムを追加し、その時に最初と最後のアイテムが同じイメージを持つことをアダプタに通知するときに、simpleedraweeviewが含まれます。 (それだけロリポップの下で起こる)Fresco:グリッドビューに間違った画像を表示

XML SimpleDraweeView:

<com.facebook.drawee.view.SimpleDraweeView 
       android:id="@+id/id_imageview" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:layout_gravity="center|center_horizontal|center_vertical" 
       android:adjustViewBounds="true" 
       android:contentDescription="@string/COM_NOTEBOOK_NOTEBOOK" 
       android:scaleType="centerInside" 
       app:imageUrl="@{url}" /> 

イメージローディングコード:

public void justLoadImage(final String mPath, final SimpleDraweeView mImageView, int width, int height) { 
    try { 

     if (TextUtils.isEmpty(mPath) || mImageView == null) { 
      return; 
     } 

     if (!isBitmapAvailableInMemCache(mPath)) { 
      GenericDraweeHierarchy hierarchy = setHierarchyForDraweeView(mImageView, 150); 
      hierarchy.setPlaceholderImage(mAsyncColorDrawable); 
      hierarchy.setFailureImage(mContext.getResources().getDrawable(R.drawable.broken_image_black)); 
     } 

     ImageRequest request; 
     if (mPath.endsWith(".jpg")) {//No i18n 
      request = ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(mPath))) 
        .setLocalThumbnailPreviewsEnabled(true) 
        .setResizeOptions(new ResizeOptions(width, height)) 
        .build(); 
     } else { 
      request = ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(mPath))) 
        .setLocalThumbnailPreviewsEnabled(true) 
        .build(); 
     } 

     DraweeController draweeController = Fresco.newDraweeControllerBuilder() 
       .setControllerListener(new ControllerListener<ImageInfo>() { 
        @Override 
        public void onSubmit(String id, Object callerContext) { 

        } 

        @Override 
        public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable animatable) { 
        } 

        @Override 
        public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) { 

        } 

        @Override 
        public void onIntermediateImageFailed(String id, Throwable throwable) { 

        } 

        @Override 
        public void onFailure(String id, Throwable throwable) { 
         clearFerscoCache(mPath); 
         mImageView.setImageURI(Uri.fromFile(new File(mPath))); 
        } 

        @Override 
        public void onRelease(String id) { 

        } 
       }) 
       .setOldController(mImageView.getController()) 
       .setImageRequest(request) 
       .setAutoPlayAnimations(false) 
       .build(); 
     mImageView.setController(draweeController); 
    } catch (OutOfMemoryError | Exception e) { 
     e.printStackTrace(); 
    } 
} 

SetHierarchyForDraweeView機能

private GenericDraweeHierarchy setHierarchyForDraweeView(SimpleDraweeView draweeView, int duration) { 
    if (draweeView != null) { 
     if (draweeView.getHierarchy() == null) { 
      GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(mContext.getResources()); 
      GenericDraweeHierarchy hierarchy = builder 
        .setFadeDuration(duration) 
        .setPlaceholderImage(new AsyncColorDrawable(mContext.getResources())) 
        .setFailureImage(mContext.getResources().getDrawable(R.drawable.broken_image_black)) 
        .build(); 
      draweeView.setHierarchy(hierarchy); 
     } else { 
      GenericDraweeHierarchy hierarchy = draweeView.getHierarchy(); 
      hierarchy.setFadeDuration(duration); 
      return hierarchy; 
     } 
    } 
    return null; 
} 

答えて

0

GridViewアダプターでViewHolerパターンを使用している場合は、ご使​​用のjustLoadImageメソッドで以下の行をチェックしてください。

if (TextUtils.isEmpty(mPath) || mImageView == null) { 
      return; 
} 

だから、単純にこの行を削除し、フレスコは、この状況に対処するか、手動でIMAGEPATHがnullの場合、あなたのViewHolderであなたのSimpleDraweeViewに空の画像を設定することができるように試みることができます。

編集:

あなたはログを確認することができます。 justLoadImageメソッドで例外を取得すると、このような状況が発生する可能性があります。

+0

ありがとうございました。しかし、私の場合、mPathとmImageViewは常にnullではありません。 – Karun

+0

私は私の答えを編集しました。 – savepopulation

関連する問題