Sto usando la libreria Android-Universal-Image-Loader per caricare immagini remote su ImageView nelle mie celle GridView.Android-Universal-Image-Loader non mantiene le immagini caricate sullo scroll in grigliaview
Qui l'configurazioni ImageLoader:
new ImageLoaderConfiguration.Builder(Config.context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.memoryCacheSize(20 * 1024 * 1024) // 20 Mb
.memoryCache(new LruMemoryCache(20 * 1024 * 1024))
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.enableLogging() // Not necessary in common
.build();
e Opzioni di visualizzazione:
new DisplayImageOptions.Builder()
.showStubImage(R.drawable.blank)
.showImageForEmptyUri(R.drawable.no_image)
.build();
I problemi: Una volta che l'attività con l'avvio GridView tutto funziona correttamente e le immagini appare nelle celle, poi Scorro la griglia verso il basso (ho circa 20 articoli nella griglia) e altre immagini si caricano correttamente. Ma una volta scorrere in alto le immagini che sono già state caricate ricominciamo a caricare.
Dopo alcuni cicli di scorrimento in alto e in basso, salva tutte le immagini e non scompaiono più.
Qualcuno ha riscontrato problemi simili o sai cosa ho sbagliato. Grazie per l'aiuto.
AGGIUNTO: Ecco il metodo GetView nel mio adattatore:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder;
if (view == null) {
view = Config.context.getLayoutInflater().inflate(R.layout.featured, null);
holder = new ViewHolder();
holder.titleText = (TextView) view.findViewById(R.id.featured_title);
holder.priceText = (TextView) view.findViewById(R.id.featured_price);
holder.image = (ImageView) view.findViewById(R.id.thumbnail_image);
view.setTag(holder);
}
else {
holder = (ViewHolder) view.getTag();
}
HashMap<String, String> listing = listings.get(position);
/* set text values */
holder.titleText.setText(listing.get("title"));
holder.priceText.setText(listing.get("price"));
/* load image to list (AsyncTask) */
Utils.imageLoaderFeatured.displayImage(listing.get("photo"), holder.image, Utils.imageLoaderOptionsFeatured);
return view;
}
PS. Fammi sapere se vuoi vedere altro codice (adattatore di rete) per aiutarmi con questo problema.
John
Come si vede, non si utilizza la cache nella memoria né sul disco. Prova ad abilitare la memorizzazione nella cache in Opzioni di visualizzazione. – NOSTRA
L'ho usato prima ma rimosso dopo aver aggiornato la libreria alla versione 1.8.5 a causa di .cacheInMemory() e .cacheOnDisc() sono stati deprecati, anche se le immagini di .cacheInMemory() non vengono mantenute dalla prima volta, l'utente deve scorrere verso l'alto e giù almeno 4 volte prima che l'app memorizzi nella cache tutte le immagini nella griglia. –
Dovresti leggere i documenti Java di quei metodi deprecati. Quindi puoi vedere che dovresti usare '.cacheInMemory (true)' e '.cacheOnDisc (true)'. Vedi il tuo problema nell'app di esempio UIL? – NOSTRA