Android - Como optimizar un ListView

 
Vista:
Imágen de perfil de Ilich

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):

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder