elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Android - Control Spinner
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Android - Control Spinner  (Leído 2,168 veces)
TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Android - Control Spinner
« en: 12 Diciembre 2018, 12:39 pm »

Hola a todos,

tengo una duda:

En la clase ArrayAdapter <String> se requieren en el constructor tres parametros. En el
primero hay que pasarle un objeto (normalmente la clase actual). Luego el adaptador
hay que pasarselo al metodo setAdapter de la clase Spinner. Pero necesita este metodo el
primer parametro que es pasado al constructor de la clase ArrayAdapter <String>? Por
qué?

Y por qué no hicieron los programadores la posibilidad de pasar los parametros al
metodo setAdapter directamente en vez de tener que crear un adaptador? No es eso poco
eficiente?


Gracias y saludos


En línea

HardC0d3

Desconectado Desconectado

Mensajes: 49



Ver Perfil
Re: Android - Control Spinner
« Respuesta #1 en: 28 Diciembre 2018, 22:34 pm »

ArrayAdapter: https://developer.android.com/reference/android/widget/ArrayAdapter

Spinner: https://developer.android.com/reference/android/widget/Spinner

El primer parámetro que pide el constructor de la clase ArrayAdapter es un objeto de la clase Context.
La firma del método setAdapter de la clase Spinner es: setAdapter(SpinnerAdapter adapter), por lo tanto, pide que se le pase un objeto de la clase/interfaz SpinnerAdapter.

Citar
Pero necesita este metodo el primer parametro que es pasado al constructor de la clase ArrayAdapter <String>?
Por qué?

setAdapter no pide un objeto Context ("primer parámetro del contructor de la clase ArrayAdapter"), sino que pide un objeto de la clase/interfaz SpinnerAdapter o cualquier subclase de ésta.

Porque si un método pide un objeto, es mejor construir ese objeto antes de pasárselo como parámetro a un método. Así, ese objeto puedes usarlo posteriormente con otros métodos que pidan Adapter en vez de estar construyendo el objeto dentro de un método de Spinner, ya que la función de Spinner no es crear Adapter sino obtener la "información" del objeto Adapter, entre otras cosas.

Saludos.


En línea

TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Re: Android - Control Spinner
« Respuesta #2 en: 12 Febrero 2019, 14:20 pm »

Hola HardC0d3,

gracias por tu respuesta. Dejame, por favor, mostrarte el siguiente código:

Código:
String []opciones={"sumar","restar","multiplicar","dividir"};
ArrayAdapter <String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, opciones); spinner1.setAdapter(adapter);

¿Por qué hay que pasarle al constructor de ArratAdapter<String> uns referencia de la clase actual?
¿Por que no hicieron los programadores que en el método setAdapter se han pasados los tres parámetros? Es decir, así:

Código:
String []opciones={"sumar","restar","multiplicar","dividir"};
spinner1.setAdapter(this,android.R.layout.simple_spinner_item, opciones);

Gracias y saludos
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Android - Control Spinner
« Respuesta #3 en: 12 Febrero 2019, 17:22 pm »

Porque rompe uno de los objetivos/pilares de la programación orientada a objetos: La encapsulación.

La idea en la OOP es que se creen objetos abstractos, cada objeto hace su tarea y nada más. Cuanto más abstracto sea un objeto más genérico y por tanto más reutilizable resulta (encaja en más diferentes sitios que si está muy especializado).

Si un objeto debe tratar los métodos de otro objeto, entonces estará haciendo su tarea y parte de la que se supone que se encarga otro objeto.

Con tu ejemplo: al recibir tu 'spinner' un objeto arrayadapter, se supone que dicho objeto ya ha validado los parámetros que recibió al crearse la instancia 'adapter', así 'spinner', se desentiende de tener que tratar si dichos parámetros son válidos o no, la única verificación que precisaría, es saber que dicha instancia existe, los parámetros que luego tome de 'adapter', ya son seguro tomarlos y operar con ellos (con la garantía (se supone) de ser correctos).

Además la encapsulación, si te das cuenta simplifica mejor los parámetros, ya que 'adapter' atrapa todos los parámetros que al caso precisa 'spinner'.
En línea

TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Re: Android - Control Spinner
« Respuesta #4 en: 14 Febrero 2019, 16:07 pm »

Hola NEBIRE,

¡¡lo has explicado de una manera tan maravillosa!!

Te estoy muy agradecido.


Gracias y saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Spinner
Java
DiTeN 2 6,027 Último mensaje 24 Enero 2010, 00:26 am
por DiTeN
Aplicacion android control remoto arduino
Electrónica
R0BERT0 0 3,391 Último mensaje 15 Septiembre 2013, 10:46 am
por R0BERT0
Problema Android (SchrolView Control personalizado)
Java
LaThortilla (Effort) 1 1,491 Último mensaje 19 Mayo 2014, 00:36 am
por LaThortilla (Effort)
¡Cuidado! Algunos fidget spinner explotan
Noticias
wolfbcn 0 1,190 Último mensaje 30 Junio 2017, 21:19 pm
por wolfbcn
llenar spinner con webservice soap
Programación General
hades645 0 1,924 Último mensaje 21 Mayo 2019, 00:23 am
por hades645
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines