
Como optimizar un ListView
Publicado por Ilich (1 intervención) el 29/05/2015 05:24:07
Buenas. Estoy intentando hacer un adaptador para un ListView que me genere únicamente los rows que se necesiten para que utilice menos recursos.
Es decir: Si en la pantalla se muestran 5 rows (o filas), se generen 7 ¿Por qué 7? Se generan 2 extra; una para cando el ListView se deslice hacia arriba y otra para cuando se deslice hacia abajo, Y si es la ultima posición o la primera ya no se generen más Views.
Por si no me he explicado bien, les dejo este vídeo donde el instructor hace exactamente lo que pido, pero el usa la librería ButteKnife (La cuál no quiero usar).
Por si quieren el código que aparece en el vídeo, aquí esta (aunque tiene unos leves errores tipográficos):
Es decir: Si en la pantalla se muestran 5 rows (o filas), se generen 7 ¿Por qué 7? Se generan 2 extra; una para cando el ListView se deslice hacia arriba y otra para cuando se deslice hacia abajo, Y si es la ultima posición o la primera ya no se generen más Views.
Por si no me he explicado bien, les dejo este vídeo donde el instructor hace exactamente lo que pido, pero el usa la librería ButteKnife (La cuál no quiero usar).
Por si quieren el código que aparece en el vídeo, aquí esta (aunque tiene unos leves errores tipográficos):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class ContactArrayAdapter extends ArrayAdapter<Contacto>{
private static final String LOG_TAG = ContactArrayAdapter.class.getSimpleNAme();
private Context context;
private List<Contacto> contactos;
public ContactArrayAdapter(Context context, int resource, List<Contactos> contactos){
super.(context, resource, contactos);
this.contactos=contactos;
this.context=context;
setNotifyOnChange(true);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
ViewHolder holder = null;
if(row==null){
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row=inflater.inflate(R.layout.lisview_item, parent, false);
holder=new ViewHolder();
ButterKnife.inject(holder, row);
row.setTag(holder);
} else {
holder=(ViewHolder) row.getTag();
}
inicializarContenido(row, holder, contactos.get(position));
return row;
}
inicializarContenido(View view, ViewHolder holder, Contacto contacto){
}
public class ViewHolder {
@InjectView(R.id.rootLayout)
protected LinearLayout rootView;
@InjectView(R.id.viewNombre)
protected TextView viewNombre;
@InjectView(R.id.viewTelefono)
protected TextView viewTelefono;
@InjectView(R.id.viewMail)
protected TextView viewEmail;
@InjectView(R.id.viewDireccion)
protected TextView viewDireccion;
@InjectView(R.id.viContactImage)
protected ImageView viewImagen;
}
}
Valora esta pregunta


0