android - Universal Image Loader - 在多个 View 中使用相同的图像

标签 android imageview universal-image-loader

我正在使用 Universal Image Loader 从后端加载图像以在列表中显示用户图像;但是,如果该图标出现多次,则 Universal Image Loader 不会填满所有 View 。

  • [用户图片 1] - 无图片
  • [用户图片 1] - 无图片
  • [用户图片 2] - 很好
  • [用户图片 2] - 无图片
  • [用户图片 3] - 很好
  • [用户图片 1] - 很好

然后在另一个屏幕上:

  • [用户图片 1] - 很好
  • [用户图片 1] - 无图片

我正在使用 cacheInMemory 和 cacheOnDisk,这似乎改进了它。和以前一样,它只在其中一个 View 中显示它,而不是在大多数 View 中显示它,但我需要所有 View 都能正常工作。

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .cacheInMemory( true )
            .cacheOnDisk( true )
            .build();

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this )
            .threadPoolSize( 3 )
            .defaultDisplayImageOptions( defaultOptions )
            .build();

ImageLoader.getInstance().init( config );

我没有为此任务使用 ListView,我使用的是 ScrollView 并使用自定义布局对其进行扩充。

private View createSmallActivity( LayoutInflater inflater, final Event activity ) {

    final View view;
    view = inflater.inflate( R.layout.activity_posted_small, null );
    ...
    // The owner's image.
    if( activity.ownerImageUrl != null ) {
        Loader.loadImage( getActivity(),
               activity.ownerImageUrl,
               R.drawable.postedactivitysmall_imageprofileempty,
               ( ImageView ) view.findViewById( R.id.profileImage ) );
    }
    return view;
}



// Loader.loadImage
// Setting the targetSize, and masking the image with a resource.
public static void loadImage( Context context, String url, int resource, ImageView view ) {
    Drawable d = context.getResources().getDrawable( resource );
    int h = d.getIntrinsicHeight();
    int w = d.getIntrinsicWidth();

    ImageSize targetSize = new ImageSize( w, h );
    ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );
}

关于如何改进 Universal Image Loader 以确保正确填写所有 View ,我有什么想法吗?

感谢您的帮助!

最佳答案

这是因为 Universal Image Loader 取消了之前使用相同 url(用作 id)的请求。为防止这种行为,请替换

ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );

通过

ImageLoader.getInstance().displayImage(url, 
    new NonViewAware(new ImageSize(w, h), ViewScaleType.CROP),
    new MaskImageLoader(context, view, resource));

关于android - Universal Image Loader - 在多个 View 中使用相同的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29873402/

相关文章:

javascript - Uncaught Error : INVALID_STATE_ERR: DOM Exception 11

android - 在只有 2 列的 TableRow 中设置 3 个 TextView - Android

android - `ListView.invalidateViews()` 和 'Adapter.notifyDataSetChanged()' 之间有什么区别吗?

android - 分享图片元素过渡显示不正确的尺寸

android - 使用 Universal Image Loader 使用下载的图像设置 RelativeLayout 的背景

Android MVP - RxJava 和改造 - 最佳方法

android - 如何在android的imageview中设置图像?

java - 如何在 android 的复合绘图中获取 imageview 引用?

android - ImageView 在方向改变时调整大小

java - ViewPager通用图像加载器如何实现