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

Respuesta
 
Herramientas
  #1  
Viejo 26/01/16, 12:01:29
Array

[xs_avatar]
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar

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.
Responder Con Cita


  #2  
Viejo 26/01/16, 12:06:32
Array

[xs_avatar]
Braaank Braaank no está en línea
Usuario muy activo
· Votos compra/venta: (2)
 
Fecha de registro: ago 2012
Localización: Madrid
Mensajes: 1,149
Modelo de smartphone: One Plus 3T, iPad Air 32 GB
Tu operador: Orange
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
Responder Con Cita
  #3  
Viejo 26/01/16, 12:37:52
Array

[xs_avatar]
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar

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í?
Responder Con Cita
  #4  
Viejo 26/01/16, 14:16:53
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por DevilKeeper Ver Mensaje
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í?
Se llama tipo genérico. La clase base define un T. Y tú al usarla índicas que tipo va a contener realmente.

Enviado desde mi SM-G900F mediante Tapatalk
Responder Con Cita
  #5  
Viejo 28/01/16, 17:56:15
Array

[xs_avatar]
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar

 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Se llama tipo genérico. La clase base define un T. Y tú al usarla índicas que tipo va a contener realmente.

Enviado desde mi SM-G900F mediante Tapatalk
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...
Responder Con Cita
  #6  
Viejo 28/01/16, 18:09:09
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
  #7  
Viejo 28/01/16, 18:56:42
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por DevilKeeper Ver Mensaje
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...
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.
Responder Con Cita
  #8  
Viejo 29/01/16, 19:15:20
Array

[xs_avatar]
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar

 Cita: Originalmente Escrito por kriogeN Ver Mensaje
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.
Gracias a todos, ya me ha quedado mas claro.

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.
Responder Con Cita
  #9  
Viejo 29/01/16, 19:34:12
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Mientras extienda ViewHolder, sin problema
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android

Herramientas


Hora actual: 00:45:07 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /