В моем проекте Android я показываю все изображения от web service(Url)
до ListView
для этой цели. Я использовал Universal image loader
. После загрузки некоторых изображений в List, если я прокручиваю вниз, прокручиваем Up, уже загруженные изображения снова загружаются.Listview перезагружает уже загруженные изображения с помощью универсального загрузчика изображений
DisplayImageOptions.Builder displayImageOptionsBuilder = new DisplayImageOptions
.Builder().cacheOnDisk(true).cacheInMemory(true).considerExifParams(true);
ImageLoader.getInstance().displayImage(imageUri, imageView,
displayImageOptionsBuilder.build());
То, что я пытался
ImageAware imageAware = new ImageViewAware(imageView, false);
ImageLoader.getInstance().displayImage(imageUri, imageAware,displayImageOptionsBuilder.build());
Даже использовал этот код не будет вносить какие-либо изменения в ListView reloading
Edited
адаптер класса
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final String name = getItem(position);
View view = convertView;
if (view == null) {
view = createView();
ViewHolder viewHolder = new ViewHolder();
viewHolder.image = (ImageView) view.findViewById(R.id.capsule_media_list_item_thumbnail_1);
view.setTag(viewHolder);
}
ImageHelper.initImage(viewHolder.image,
imageUrl,
R.drawable.vx_loading, loadingImageResource,displayOptionsCustomizer);
return view;
}
private final DisplayOptionsCustomizer displayOptionsCustomizer = new DisplayOptionsCustomizer() {
@Override
public void customizeImageOptions(DisplayImageOptions.Builder displayImageOptionsBuilder) {
displayImageOptionsBuilder.displayer(new RoundedBitmapDisplayer(ApplicationUtils
.dipToPixelsRounded(6, getContext()), 0));
}
};
static class ViewHolder {
public ImageView image;
}
ImageHelper.java
public static void initImage(final ImageView imageView, final String imageUri,
final int noImageResource, final int loadingImageResource,
final DisplayOptionsCustomizer displayOptionsCustomizer) {
if (StringUtils.isNotBlank(imageUri)) {
DisplayImageOptions.Builder displayImageOptionsBuilder = new DisplayImageOptions
.Builder().cacheOnDisk(true).cacheInMemory(true).considerExifParams(true);
displayImageOptionsBuilder.showImageOnLoading(loadingImageResource)
.showImageOnFail(noImageResource);
if (displayOptionsCustomizer != null) {
displayOptionsCustomizer.customizeImageOptions(displayImageOptionsBuilder);
}
ImageLoader.getInstance().displayImage(imageUri, imageView,
displayImageOptionsBuilder.build());
} else {
if (noImageResource != 0) {
imageView.setImageResource(noImageResource);
} else {
imageView.setVisibility(View.GONE);
}
}
}
Edited адаптер класса согласно Dhir Pratap
ответ
public class ImagesListAdapter extends ArrayAdapter<String> {
private List imagesList = new ArrayList<String>();
private Context context;
ImageLoader imageLoader;
DisplayImageOptions options;
public ImagesListAdapter(Context context, List<String> imagesList) {
super(context, -1,imagesList);
this.imagesList = imagesList;
this.context = context;
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisk(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(fallbackImage)
.showImageOnFail(fallbackImage)
.showImageOnLoading(fallbackImage).build();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final String name = getItem(position);
View view = convertView;
ViewHolder viewHolder;
if (view == null) {
view = createView();
viewHolder = new ViewHolder();
viewHolder.image = (ImageView) view.findViewById(R.id.capsule_media_list_item_thumbnail_1);
view.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) view.getTag(viewHolder);
}
/*ImageHelper.initImage(viewHolder.image,
imageUrl,
R.drawable.vx_loading, loadingImageResource,displayOptionsCustomizer);*/
imageLoader.displayImage(imageUrl,viewHolder.image,
options);
return view;
}
/* private final DisplayOptionsCustomizer displayOptionsCustomizer = new DisplayOptionsCustomizer() {
@Override
public void customizeImageOptions(DisplayImageOptions.Builder displayImageOptionsBuilder) {
displayImageOptionsBuilder.displayer(new RoundedBitmapDisplayer(ApplicationUtils
.dipToPixelsRounded(6, getContext()), 0));
}
}; */
static class ViewHolder {
public ImageView image;
}
}
ваш вопрос непонятен ... как вы использовали ImageLoader в getView адаптера? Насколько велики изображения (важно, поскольку загрузчики изображений могут выпускать кешированные растровые изображения, когда память низкая, поэтому она должна загружать ее из дискового кеша или даже из Интернета (см. Следующий вопрос))? Также использует ли сервер e-tag (или другие заголовки кеширования)? – Selvin
@Selvin Я тоже редактировал свой вопрос с помощью метода getView() класса адаптера. – Jamal
Размеры изображения различаются, каждое изображение имеет собственный размер. Они, вероятно, 14,1 кб, 13,2 кб, 27 кб, 23,4 кб, 11 кб и т. Д. – Jamal