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  
Viejo 26/01/16, 12:01:29
Avatar de DevilKeeper
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
Mensajes: 8
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de Braaank
Braaank Braaank no está en línea
Usuario muy activo
Mensajes: 1,149
Compra y venta: (2)
 
Fecha de registro: ago 2012
Localización: Madrid
Mensajes: 1,149
Modelo de smartphone: One Plus 3T, iPad Air 32 GB
Versión de ROM: Stock
Tu operador: Orange
Mencionado: 1 comentarios
Tagged: 0 hilos
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
Avatar de DevilKeeper
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
Mensajes: 8
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de DevilKeeper
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
Mensajes: 8
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
  #7  
Viejo 28/01/16, 18:56:42
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de DevilKeeper
DevilKeeper DevilKeeper no está en línea
Usuario poco activo
Mensajes: 8
 
Fecha de registro: ene 2016
Mensajes: 8
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Mientras extienda ViewHolder, sin problema
Responder Con Cita
Respuesta

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

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 09:04:52 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007