Ho una vista elenco che mostra i video con la loro immagine in miniatura, sto usando l'adattatore del cursore (Fetches using ContentProvider). Il problema è che il numero di voci della lista aumenta le prestazioni della visualizzazione elenco diventando molto povere. Per favore fatemi sapere il modo migliore per renderlo carico pigro.Caricamento lento in ListView con immagine. (Adattatore per cursori)
Nuovo: Finalmente ho trovato qualche soluzione. Funziona bene per me. Per favore fatemi sapere se avete qualche consiglio. Il mio nuovo codice è qui. (Usa stack con patern produttore dei consumatori e filo bacground per selezionatrici)
@Override public void Bindview (Panorama vista, contesto Context, cursore Cursore) {
ViewHolder holder = (ViewHolder) view.getTag();
String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
holder.getIdView().setText(name);
holder.getThumbView().setTag((Integer)id);
if(LazyLoader.getInstance().containsKey(id)) {
Object bitmap = LazyLoader.getInstance().getBitMap(id);
if(null != bitmap && (bitmap instanceof Bitmap)) {
holder.getThumbView().setImageBitmap((Bitmap)bitmap);
} else {
holder.getThumbView().setImageDrawable(null);
}
} else {
holder.getThumbView().setImageDrawable(null);
LazyItem lazyItem = new LazyItem();
lazyItem.setId(id);
lazyItem.setThumbNail(holder.getThumbView());
LazyLoader.getInstance().putItem(lazyItem);
}
}
public class LazyLoaderHelper extends Thread {
private ContentResolver resolver = null;
private Activity activity;
private boolean isActive = true;
ExecutorService executor;
public LazyLoaderHelper(Activity _activity , ContentResolver _resolver) {
resolver = _resolver;
activity = _activity;
isActive = true;
executor = Executors.newFixedThreadPool(10);
}
public void stopThread() {
isActive = false;
executor.shutdown();
}
@Override
public void run() {
while (isActive) {
if(LazyLoader.getInstance().getSize() > 0) {
final LazyItem lazyItem = LazyLoader.getInstance().getItem();
if(null != lazyItem) {
executor.execute(new Runnable() {
@Override
public void run() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
if ((null != resolver) && (null != activity)) {
final Bitmap thumb = MediaStore.Video.Thumbnails.getThumbnail(resolver, lazyItem.getId(), MediaStore.Video.Thumbnails.MICRO_KIND, options);
if (null != thumb) {
LazyLoader.getInstance().putBitMap(lazyItem.getId(), thumb);
} else {
LazyLoader.getInstance().putBitMap(lazyItem.getId(), new Object());
}
if ((Integer) lazyItem.getThumbNail().getTag() == lazyItem.getId()) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (null != thumb) {
lazyItem.getThumbNail().setImageBitmap(thumb);
} else {
lazyItem.getThumbNail().setImageDrawable(null);
}
}
});
}
}
}
});
}
}
}
}
}
Per il caricamento dell'immagine pigro, consiglio [UIL] (https://github.com/nostra13/Android-Universal-Image-Loader/wiki). –
inserisci il tuo codice adattatore – pskink
usi ViewBinder? in tal caso, inserisci anche il suo codice – pskink