- Post del forum: 16
28 mag 2015, 15:19:42 Tramite pagina web
28 mag 2015 15:19:42 Tramite pagina web
Salve a tutti, sono alla mia prima app (come forse avrete notato, con tutte le domande che ho già inserito in questo forum) e quindi per ogni problema sbatto la testa contro il muro finché non mi decido a chiedere aiuto.
Ho una GridView con immagini, e vorrei implementare il ViewHolder per migliorare le performance. Di seguito il codice.
XML per le dimensioni della singola cella della griglia:
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/grid_view_item_height"
android:id="@+id/immagineGriglia" />
e il codice java dell'image adapter:
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class ImageAdapterAdulti15 extends ArrayAdapter {
private Context context;
private int layoutResourceId;
private ArrayList data = new ArrayList();
// Keep all Images in array
public Integer[] mThumbIds = {
R.drawable.image1, R.drawable.image2........
};
// Constructor
public ImageAdapterAdulti15(Context context, int layoutResourceId, ArrayList data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View cella = convertView;
ViewHolder holder = null;
if (cella == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
cella = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.immagineGriglia = (ImageView) cella.findViewById(R.id.immagineGriglia);
cella.setTag(holder);
} else {
holder = (ViewHolder) cella.getTag();
}
ImageItem item = (ImageItem) data.get(position);
holder.immagineGriglia.setImageBitmap(item.getImage());
return cella;
}
static class ViewHolder {
ImageView immagineGriglia;
}
}
Come dicevo nel titolo, in questo modo la GridView risulta più lenta e con più tendenza a piantarsi per OutOfMemoryError rispetto alla stessa griglia senza ViewHolder.
Direi quindi che il codice di cui sopra è sbagliato o incompleto.
Sto avendo davvero difficoltà a capire non tanto il concetto di ViewHolder, quanto piuttosto il codice per farlo funzionare. Sapreste mica dirmi dove sbaglio?
Grazie!
Contenuti editoriali consigliati
Con il vostro consenso, qui vengono caricati contenuti esterni.
Facendo clic sul pulsante qui sopra, l'utente accetta che vengano visualizzati contenuti esterni. I dati personali possono essere trasmessi a fornitori terzi. Per ulteriori informazioni al riguardo, consultare il nostro sito Informativa sulla privacy.