PDA

Ver la Versión Completa : [ CONSULTA ] Personalizar un listview.


milup26
08/11/14, 15:41:24
Hola.

Tengo problemillas para entender la creación del adaptador personalizado, he leído varios tutoriales y el último el de esta web (http://hermosaprogramacion.blogspot.com.es/2014/10/android-listas-adaptadores.html), dicha web la he visto en un post en el foro.

Digamos que hasta donde es poner, imagen y texto lo entiendo; pero quiero ir más lejos poniendo secciones y títulos según que cuadros del listview, pero estoy algo atascado.

Digamos que quiero crear una listview así:

Título (como si fuera una cabecera:,pero sin usar el addheader(),así solo me añade lo que es la cabecera encima del primer elemento)
-elemento 1
-elemento 2
Otro título para el esto de elementos:
-elemento 3
-elemento 4

Más o menos es como el estilo del listview del menú lateral del Gmail, o el estilo del google play music también es interesante.

Entonces a ver, en el tutorial mencionado arriba o en otros similares lo que hace es usar:

LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity. LAYOUT_INFLATER_SERVICE);

Y después inflar el xml con los elementos a mostrar, como comentaba con una imagen y un texto lo entiendo. Pero para hacer lo que quiero, debo crear otros xml con la forma deseada o van en el mismo xml?.
Lo de crear otro xml lo he hecho , y declaré otro LayoutInflater con el xml con el texto para los títulos de cabecera pero de esa forma no funciona.

Qué me aconsejáis?

Un saludo y gracias de antemano. :-)

rafaxplayer
08/11/14, 20:08:25
Aqui tienes un buen ejemplo:

http://javatechig.com/android/listview-with-section-header-in-android

milup26
10/11/14, 20:25:48
Gracias. Hay unas cosas que no termino de entender en el tutorial. El método
@Override
public int getItemViewType(int position)
{
return sectionHeader.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}

Qué quiere decir la interrogación y los tipos entre los dos puntos?.Según he leído el TreeSet ordena pero no termino de entender la lógica del asunto y el valor que retorna.

Un saludo.

Walnow
13/11/14, 12:12:14
Si lo que quieres hacer es agrupar los registros por alguna caracteristica, lo que puedes hacer es unas ExpandableListView. El adapter tiene que heredar de BaseExpandableListAdapter. El funcionamiento es muy parecido al BaseAdapter pero con la diferencia que tiene metodos para el grupo y los mismos para el detalle. También puedes usar un tipo de layout para el grupo y otro layout para el detalle.

kriogeN
13/11/14, 14:10:09
Gracias. Hay unas cosas que no termino de entender en el tutorial. El método
@Override
public int getItemViewType(int position)
{
return sectionHeader.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}

Qué quiere decir la interrogación y los tipos entre los dos puntos?.Según he leído el TreeSet ordena pero no termino de entender la lógica del asunto y el valor que retorna.

Un saludo.

Es una operación llamada ternaria, viene de la época de C y era una de las muchas formas que tenía C de escribir código sucio, aunque reconozco que desde que me he habituado a usarlo no puedo vivir sin él.

La operación lo que hace es devolver el elemento a la derecha del ? si lo que está a la izquierda es true, en caso de que sea false devuelve lo que está a la derecha del :

En este caso, si sectionHeader.contains(position) es true devuelve TYPE_SEPARATOR, y si es false devuelve TYPE_ITEM

milup26
13/11/14, 15:49:23
Es una operación llamada ternaria, viene de la época de C y era una de las muchas formas que tenía C de escribir código sucio, aunque reconozco que desde que me he habituado a usarlo no puedo vivir sin él.

La operación lo que hace es devolver el elemento a la derecha del ? si lo que está a la izquierda es true, en caso de que sea false devuelve lo que está a la derecha del :

En este caso, si sectionHeader.contains(position) es true devuelve TYPE_SEPARATOR, y si es false devuelve TYPE_ITEM

Muchas gracias por la explicación.Buscaba por Google y no encontraba nada, es más, el buscador me reconocía mis búsquedas como preguntas xD.

Un saludo.