|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Una mano para entender el código...
Buenos días compañeros:
Soy nuevo en el foro, y nuevo en programación Android, y tengo algunas dudas que no sé como resolver, por lo que esperaba que me echárais una mano. Estoy siguiendo un curso gratuito más o menos actualizado, y me he quedado atascado con el control RecyclerView. En el ejemplo de la página del curso aparece éste código: public class AdaptadorTitulares extends RecyclerView.Adapter<AdaptadorTitulares.TitularesV iewHolder> { //... public static class TitularesViewHolder extends RecyclerView.ViewHolder { private TextView txtTitulo; private TextView txtSubtitulo; public TitularesViewHolder(View itemView) { super(itemView); txtTitulo = (TextView)itemView.findViewById(R.id.LblTitulo); txtSubtitulo = (TextView)itemView.findViewById(R.id.LblSubTitulo) ; } public void bindTitular(Titular t) { txtTitulo.setText(t.getTitulo()); txtSubtitulo.setText(t.getSubtitulo()); } } //... } Se supone que es la clase del Adaptador que necesita el RecyclerView, pero lo que no entiendo es lo señalado en rojo. Sé lo que es extender una clase, pero no entiendo que significan los signos de menor que y mayor que. ¿La clase extiende de otra y a su vez de otra clase que se definde en su interior?. A ver si alguién puede aclarármelo. Gracias. |
|
|
|
#2
|
||||
|
||||
|
Vale, entiendo lo que necesitas.
Lo que hay entre ese mayor que y menor que significa la clase que va a contener ese adaptador. Te pongo un ejemplo más sencillo con una clase de tipo ArrayList. Cuando tú creas un ArrayList haces más o menos lo siguiente: ArrayList<String> lista = new ArrayList<String>(); Lo que indica dentro de <> indica lo que vas a almacenar dentro de este objeto ArrayList. Enviado desde mi iPad utilizando Tapatalk |
|
#3
|
||||
|
||||
|
Muchas gracias por la respuesta.
Entonces son dos cosas separadas, el extends por un lado y la clase que contiene con menor y mayor que, por otro. Pensé que todo formaba parte del extends. Pero no termino de encontrarle sentido. ¿Qué nombre recibe ésta práctica?. ¿Clase interna o algo así? |
|
#4
|
||||
|
||||
|
Muchas gracias por la respuesta.
Entonces son dos cosas separadas, el extends por un lado y la clase que contiene con menor y mayor que, por otro. Pensé que todo formaba parte del extends. Pero no termino de encontrarle sentido. ¿Qué nombre recibe ésta práctica?. ¿Clase interna o algo así? ![]() Enviado desde mi SM-G900F mediante Tapatalk |
|
#5
|
||||
|
||||
|
Este es un concepto que no he visto jamás, y me está costando entenderlo. Con el ejemplo Braaank y el ArrayList lo veo enseguida, tengo un objeto ArrayList que va a contener Strings. Pero al aplicarlo al RecycerView en Android, no me cuadra. Tengo una clase que extiende de RecyclerView.Adapter que... ¿que qué?, si entre <> estoy poniendo una clase que yo mismo he creado dentro... No lo pillo...
|
|
#6
|
||||
|
||||
|
Antes de los tipos genéricos se usaban parámetros de tipo Object para pasar instancias de clases arbitrarias, que era horrible porque por ejemplo una tabla hash cada vez que te devolvía un Object tenías que hacer un casting de tipos y el compilador tampoco podía comprobar si era lo que se pretendía o no.
La gracia de los <T> es precisamente poder meter una clase que ni siquiera existía porque la has hecho tú. Es una forma de decirle a Java que siempre vas a trabajar con ese tipo de clase. Aplicado a una tabla hash por ejemplo, sus métodos ya no devuelven Object sino el tipo que le hayas dicho al construir la tabla.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
|
#7
|
||||
|
||||
|
Gracias a los dos por las respuestas.
Este es un concepto que no he visto jamás, y me está costando entenderlo. Con el ejemplo Braaank y el ArrayList lo veo enseguida, tengo un objeto ArrayList que va a contener Strings. Pero al aplicarlo al RecycerView en Android, no me cuadra. Tengo una clase que extiende de RecyclerView.Adapter que... ¿que qué?, si entre <> estoy poniendo una clase que yo mismo he creado dentro... No lo pillo... ![]() ![]() De esa manera ocurrirá lo que dice mocelet, los tipos en tu clase serán TitularesViewHolder, en lugar de ViewHolder, y así te evitas tener que castear de ViewHolder a TitularesViewHolder, que es el tipo real que estás introduciendo en el Adapter. |
|
#8
|
||||
|
||||
|
Le estás diciendo al RecyclerView.Adapter que los ViewHolder que va a contener son de tipo TitularesViewHolder. Porque RecyclerView.Adapter se define como: RecyclerView.Adapter<T extends ViewHolder>.
De esa manera ocurrirá lo que dice mocelet, los tipos en tu clase serán TitularesViewHolder, en lugar de ViewHolder, y así te evitas tener que castear de ViewHolder a TitularesViewHolder, que es el tipo real que estás introduciendo en el Adapter. ![]() Entonces, si en lugar de definir mi clase TitularesViewHolder dentro de la clase Adaptador, lo definiera en otra clase a parte... ¿Sería lo mismo, funcionaría igual?. De verdad, gracias por vuestro tiempo. |
|
#9
|
||||
|
||||
|
Mientras extienda ViewHolder, sin problema
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
![]() |
Estás aquí
|
||||||
|
||||||