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 29/09/09, 12:33:23
Array

[xs_avatar]
takut takut no está en línea
Miembro del foro
 
Fecha de registro: sep 2009
Mensajes: 91

startActivity bien utilizado?

Hola a todos. Este es mi primer post en el foro (espero que de muchos). Antes de nada, he de decir que estoy empezando con Android y perdonadme por mis cagadas de novato .

Queria proponeros una situación en la que me veo actualmente y ver como la resolveríais.

Imaginad una Activity con 4 botones (por ejemplo) y que al clickar en cada uno de ellos, sirva para cambiar a otra pantalla diferente (por ejemplo, con otros 4 botones diferentes).
Ahora os propondré 2 soluciones porque no sé muy bien si estoy utilizando correctamente los recursos de android.

1ª) el método onClick genera una nueva Activity con su xml asociado que contiene los nuevos botones.

2ª) el método onClick establece un nuevo contentView (con setContentView()) con el nuevo xml.

Obviamente en los dos casos se gestiona el listener de cada botón.

Espero que me podáis ayudar para entender mejor las funcionalidades de Android, así como los aspectos de rendimiento.

Un saludo.
Responder Con Cita


  #2  
Viejo 30/09/09, 20:35:31
Array

[xs_avatar]
takut takut no está en línea
Miembro del foro
 
Fecha de registro: sep 2009
Mensajes: 91

veo que la gente no participa mucho
Será que es algo trivial, pero aún así yo agradezco la ayuda para saber si estoy bien encaminado. Si resulta que no me explicado bien, por favor, decidmelo

He de decir que estoy optando por la primera opción (crear una activity para cada nueva pantalla). Me parece la más correcta y además supongo que me permitirá navegar por el stack history.

Opiniones please!!
Responder Con Cita
  #3  
Viejo 04/10/09, 20:54:41
Array

[xs_avatar]
migue85 migue85 no está en línea
Miembro del foro
 
Fecha de registro: ago 2008
Mensajes: 67
Modelo de smartphone: Magic y Diamond

Hola, lo correcto es generar una nueva intent y lanzarla a ejecutar. El establecer un nuevo xml y llamar al setContentView es posible que de un fallo en tiempo de ejecucion segun como lo hagas, en cualquier caso es ineficiente porque sobrecargaria (en caso de funcionar) el interfaz actual, dejando todos los elementos actuales en background. vamos, que no hagas eso ni de lejos

Para lanzar una nueva actividad, has de crear un intent.
Para ello, en el controlador de cada boton tienes que crear una nueva intent o bien usar una que tengas declarada como atributo glogal del modulo.

Para generar una intent haces lo siguiente:

Intent intent = new Intent(c, Nueva.class);

Donde c es el conexto de la actividad actual, lo puedes recuperar en el metodo onCreate con la siguiente linea:
c = this;
habiendo declarado como atributo de la clase:
Context c;

El motivo de salvaguardar el contexto reside en que desde el metodo onClick de un controlador, no podemos usar la expresion:
Intent intent = new Intent(this, Nueva.class);
porque this, en este caso, hace referencia al propio onClickListener.

Para lanzar posteriormente a ejecutar la actividad, despues de crear el intent invocamos el metodo startActivity:
startActivity(intent);

De esta forma, mandamos ejecutar la nueva actividad. has de saber que si incluyes despues del startActivity un finish(), se carga la nueva actividad y se cierra la actual.

De esta forma, si desde la nueva actividad pulsamos en el movil el boton back, la aplicacion se cerraria.
Si no invocamos el finish(), la nueva actividad se carga, poniendo en una pila (stack) la anterior y asi sucesivamente. De esta forma se van solapando las diferentes actividades y pulsando back en cada una, volvemos a la anterior.

El codigo quedaria asi, despues de importar las librerias necesarias que el propio eclipse indique:

Intent intent = new Intent(this, Nueva.class);
startActivity(intent);
finish(); // esta linea se incluye o no, segun prefieras.

Habiendo declarado como variable global Context c;
y c = this en el onCreate.

Finalmente te comento que a la hora de crear un Intent, en el ejemploq ue te pongo, Nuevo.class es una clasee que ha de estar definida por el programa Nuevo.java

Solo tienes que crear una clase nueva en el directorio src, llamarla como quieras, en este caso Nuevo.java e incluir los metodos pertinentes que quieras usar, incluyendo siempre su propio onCreate desde el cual y ahora si, invocas al setContentView del xml correspondiente.
No es necesario hacer nada al respecto de Nuevo.class, el fichero .class se genera automaticamente en el workspace y no tienes que hacer nada al respecto ya que poniendo esa linea se referencia directamente al .java del mismo nombre.

Finalemente, si has hecho todo hasta ahora, si invocas una nueva actividad, al invocarla saldra una excepcion y se cerrara la aplciacion. Esto es debido a que has de incluir en el manifest una referencia a la nueva clase para que ANdroid sepa que dicha clase existe, pertenece a nuestra aplicacion y tiene permisos para ejecutarse.

para ello, en el android manifest añadimos:
<activity android:name=".Nuevo"></activity>

esa entrada la anidamos en el mismo nivel que la clase principal, nunca dentro.

Puede parecer engorroso pero es muy sencillo. Siempre al principio cuesta un poco pero poco a poco veras lo facilito que es e iras tomando velocidad y practica con tus aplciaciones.
Si tienes mas dudas, no dudes en preguntar, pero por favor, no por privado y tratare de ayudarte en lo que pueda.
Espero haberte sido de ayuda, un saludo!
Responder Con Cita
  #4  
Viejo 04/10/09, 23:43:51
Array

[xs_avatar]
takut takut no está en línea
Miembro del foro
 
Fecha de registro: sep 2009
Mensajes: 91

hola migue85. antes de nada gracias por contestar, ya pensaba que nadie lo haria D

Como ya dije en el mensaje anterior, estaba optando por la opcion que tu comentaste. gracias a tu explicacion ya no me quedan dudas de que es lo correcto. Y aunque con tu primera frase ya me llegaba (hace dias que ya tengo funcionando la aplicacion), gracias por el resto de la explicacion, ya que se me habia ocurrido lo del finish() y tampoco sabia si era "legal".
Responder Con Cita
  #5  
Viejo 05/10/09, 01:24:21
Array

[xs_avatar]
migue85 migue85 no está en línea
Miembro del foro
 
Fecha de registro: ago 2008
Mensajes: 67
Modelo de smartphone: Magic y Diamond

ok me alegra haberte ayudado.
Para cualquier otra cosilla consulta lo que quieras...

Si no es indiscreccion, en que aplicacion trabajas?
saludos!
Responder Con Cita
  #6  
Viejo 05/10/09, 10:30:16
Array

[xs_avatar]
takut takut no está en línea
Miembro del foro
 
Fecha de registro: sep 2009
Mensajes: 91

no es indiscrecion ninguna

trabajo en mi proyecto de fin de carrera mejorando la accesibilidad de dispositivos moviles con android.

http://www.intic.udc.es
Responder Con Cita
  #7  
Viejo 05/10/09, 13:04:19
Array

[xs_avatar]
migue85 migue85 no está en línea
Miembro del foro
 
Fecha de registro: ago 2008
Mensajes: 67
Modelo de smartphone: Magic y Diamond

He estado echando un ojo y la verdad es que ma das envidia jeje, en mi universidad no hay proyectos de ese tipo y desde luego no con la colaboracion de nadie.
Pinta muy interesante, suerte con ello!
Responder Con Cita
Respuesta

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



Hora actual: 17:27:05 (GMT +2)



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

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