0 votos

Hola a todos…

volviéndome loco con la optimización de mi ListVIEW, dí con este vídeo del GOOGLE I/O 2010 que explica, precisamente, cómo hacerlo. Aunque a estas alturas ya lo tengo bien definido y creo que bastante claro, hay algo en el código que no explican y no acierto a entender.

Os pongo el código:

 public View getView(int position, View convertView, ViewGroup parent) {
 ViewHolder holder;

 if (convertView == null) {
 convertView = mInflater.inflate(R.layout.list_item_icon_text,
 parent, false);
 holder = new ViewHolder();
 holder.text = (TextView) convertView.findViewById(R.id.text);
 holder.icon = (ImageView) convertView.findViewById(R.id.icon);

 convertView.setTag(holder);
 } else {
 holder = (ViewHolder) convertView.getTag();
 }

 holder.text.setText(DATA[position]);
 holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);

 return convertView;
 }

En concreto, no entiendo la condición de la línea 17. Básicamente compara “postition”, que como explican e el vídeo es la posición del item dentro del adapter, con “1”. Si se cumple entonces carga una imagen y si no la otra.

¿Qué objeto tiene esta comprobación? ¿Es funcional o simplemente un condicionante para la presentación de los datos por el propio diseño que han definido ellos para el ejemplo?

Gracias… un saludo

por en Android

1 Respuesta

0 votos
Mejor respuesta
Lo que hacen en la línea 17 es permutar entre un icono y otro cuando la posición es par o impar.

Te explico: lo que hacen con “position & 1″ es hacer una comparación binaria. Es decir que si “position=5″, siendo el número decimal 5 en binario “101” y comparándolo con 1, que en binario es “001”. Entonces: 101 & 001 = 001, cuyo resultado en decimal es 1 y es “== 1″. Es decir, todo número binario que termine en 1 tendrá la imagen mIcon1 (que corresponde con los impares en decimal), y para los que terminan en 0 en binario cargará mIcon2 (par en decimal).
por