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

preguntado por Nitram Dic 22, 2014 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).
respondido por Jarroba [Admin] Dic 22, 2014