Avisos

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 24/12/11, 19:44:54
Array

[xs_avatar]
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
· Votos compra/venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 522
Tu operador: -

Declarando función de botón

Hay diferentes métodos de declarar la función de un botón, y yo ahora mismo estoy entre dos, ya que no estoy seguro de la diferencia que hay entre estas dos.

Primer método:
Código:
boton1.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        		Intent intent = new Intent(Uno.this, Dos.class);
        		startActivity(intent);
        	}
        });
Segundo método:
Código:
boton1.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        	switch (v.getId()) {
        	case R.id.boton1:
        		Intent intent = new Intent(Uno.this, Dos.class);
        		startActivity(intent);
        		finish();
        		break;
        		}
        	}
        });
Os agradecería mucho si me explicarais que diferencia hay entre estos dos métodos. Muchas gracias!

Última edición por KrLx_roller Día 24/12/11 a las 20:53:53.
Responder Con Cita


  #2  
Viejo 24/12/11, 20:07:29
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
A ver, con el código que has puesto sería más correcto el primer método, aunque ambos métodos son correctos.

Y ahora te explico la diferencia, en el segundo método tienes una condición de que solo se ejecute el código si el botón que has pulsado es boton1 (eso es lo que hace el switch), pero el código lo estás asociando directamente a boton1, con lo cual es redundante y sobra.

Y ahora, ¿para que sirve entonces ese switch?

El método setOnClickListener recibe como parametro un objeto de tipo OnClickListener, el cual puede estar ya definido a priori, y así usar el mismo código para varios botones, lo que ocurre es que la mayoría de la gente (y yo me incluyo) lo asociamos directamente al botón poniendo el new OnClickListener() en el método setOnClickListener.

Así que ese switch solo tiene sentido en un caso como el siguiente:

Código:
OnClickListener click = new OnClickListener() {  
           @Override
             public void onClick(View v) {
                      switch (v.getId()) {  
                           case R.id.boton1:
                               Intent intent = new Intent(Uno.this, Dos.class);
                               startActivity(intent);
                               finish();
                               break;
                           case R.id.boton2:
                               Intent intent = new Intent(Uno.this, Tres.class);
                               startActivity(intent);
                               finish();
                               break;
                              }
                       } 
              };
boton1.setOnClickListener(click);
boton2.setOnClickListener(click);
Este código usa el mismo OnClickListener, pero según el botón que haya ejecutado el código se ejecutará un código u otro.

Espero haberte aclarado la duda.

Última edición por kriogeN Día 24/12/11 a las 20:10:12.
Responder Con Cita
  #3  
Viejo 24/12/11, 20:36:39
Array

[xs_avatar]
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
· Votos compra/venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 522
Tu operador: -

La has aclarado y ademas muy bien explicado. Pero ahora me salta otra duda: entonces qué es mejor? Declarar un solo ClickListener con un switch y añadir todos los botones en ese mismo, o declarar tantos Listener como botones haya?
Me refiero a cuál tendrá menos carga sobre la CPU, ya que en algunos Views tengo más de 10 buttons.

Gracias!
Responder Con Cita
  #4  
Viejo 24/12/11, 20:52:20
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
Da igual, aunque yo veo mejor declarar un ClickListener para cada botón, tal y como estabas haciendo hasta ahora, así es más fácil hacer el mantenimiento del código.
Responder Con Cita
  #5  
Viejo 24/12/11, 20:53:12
Array

[xs_avatar]
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
· Votos compra/venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 522
Tu operador: -

Muchas gracias KriogeN!
Responder Con Cita
Respuesta

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



Hora actual: 19:06:30 (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 / 邮件联系 /