2017-02-02 14 views
0

Я использую gridview. В сетке каждый элемент содержит файл simpledraweeview, когда я добавляю новый элемент на первое место и уведомляю адаптер в то время, что первый и последний элементы имеют одинаковое изображение. (Это происходит только в ниже леденец)Fresco: Показать Неправильное изображение в gridview

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

Если вы используете шаблон ViewHoler в своем первом соглашении с адаптером GridView в вашей, если проверка в строках ниже в вашем методе justLoadImage может привести к возникновению такого рода ситуации.

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

Таким образом, вы можете просто попытаться удалить эти строки и пусть Фреско, чтобы справиться с этой ситуацией или вручную установить пустое изображение на SimpleDraweeView в вашем ViewHolder если ImagePath является недействительным.

Edit:

Вы можете проверить журналы. Получение исключения в вашем методе justLoadImage также может вызвать подобную ситуацию.

+0

Спасибо. Но в моем случае mPath и mImageView всегда не являются нулевыми. – Karun

+0

Я отредактировал свой ответ. – savepopulation

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

  • Нет связанных вопросов^_^