का उपयोग करके पहले से लोड की गई छवियों की सूची दृश्य पुनः लोड करना मेरे एंड्रॉइड प्रोजेक्ट में मैं इस उद्देश्य के लिए web service(Url)
से ListView
से सभी छवियां दिखा रहा हूं, मैंने Universal image loader
का उपयोग किया है। सूची में कुछ छवियों को लोड करने के बाद यदि मैं नीचे स्क्रॉल करता हूं तो स्क्रॉल किया जाता है, पहले से लोड की गई छवियां फिर से लोड हो रही हैं।यूनिवर्सल छवि लोडर
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
संपादित
एडाप्टर कक्षा
@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);
}
}
}
संपादित एडाप्टर वर्ग के रूप में प्रति 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;
}
}
आपका प्रश्न अस्पष्ट है ... आपने एडाप्टर के getView में ImageLoader का उपयोग कैसे किया? छवियां कितनी बड़ी हैं (यह महत्वपूर्ण है क्योंकि स्मृति लोडर कम होने पर छवि लोडर कैश किए गए बिटमैप्स को छोड़ सकते हैं - इसलिए इसे डिस्क कैश से या यहां तक कि इंटरनेट से भी रीयलोड करना होगा (अगला प्रश्न देखें))? सर्वर भी ई-टैग (या अन्य कैशिंग हेडर) का उपयोग करता है? – Selvin
@ सेल्विन मैंने एडाप्टर क्लास getView() विधि के साथ भी अपना प्रश्न संपादित किया है। – Jamal
छवि आकार भिन्न हैं, प्रत्येक छवि के आकार का आकार है। वे 14.1 केबी, 13.2 केबी, 27 केबी, 23.4 केबी, 11 केबी आदि – Jamal