PDA

Ver la Versión Completa : [ SOLUCIONADO ] Finalizar Activity


Jetemias
19/01/14, 20:06:48
Buenas tardes,

He empezado hace poco con android y desde hace tiempo tengo un problema que no consigo solventar.

Les pongo un poco en contexto:
Al ejecutar una actividad, hay dos formas de "mostrar" la actividad por pantalla (desconozco si hay más de dos), la primera es mostrando un layout y la segunda es mostrando una clase java que no hereda de Activity. Les dejo un ejemplo para cada caso con lo que quiero decir:

Para mostrar un layout:
setContentView(R.layout.activity_Layout);Para mostrar una clase java:
setContentView(new ClaseJava());Cuando ejecuto otra actividad con un Intent, la actividad anterior se queda en la pila de actividades abiertas a no ser que la finalize.
Intent intent = new Intent(this, Activity.class);Mi problema es el siguiente, no se como terminar la actividad abierta/mostrada por la clase java, es decir, si hago un Intent para abrir otra actividad desde esta clase, al cerrar la nueva esta sigue apareciendo.

Muchas gracias de antemano.
Un saludo

PD: no me vengan con que se ha de utilizar el método finalize();, ese solo funciona para clases java que hereden de Activity y la mía no hereda de este.
PD2: tampoco me digan del método onDestroy();, como mi clase no hereda de Activity no puedo sobrescribir dicho método.
PD3: desconozco si hay alguna Interfaz que me permita sobrescribir los métodos mencionados anteriormente.

kriogeN
19/01/14, 20:48:17
Algo debe estar mal en el código que has puesto, efectivamente cuando usas el setContentView puedes pasar un Layout o una clase, pero esa clase tiene que heredar de "View". Lo que significa que al construirla debes COMO MÍNIMO, pasarle un Context por parámetro.

Es decir, el código debería ser tal que así:

setContentView(new ClaseJava(this));

Porque Activity es un Context. A partir de aquí, si quieres finalizar la Activity desde ClaseJava, nada más fácil:

((Activity)getContext()).finish();

Realmente, y según los sitios donde uses ClaseJava, para ahorrarte algún que otro ClassCastException deberías hacer esto:

if (getContext() instanceof Activity)
((Activity)getContext()).finish();

Jetemias
19/01/14, 20:59:40
Algo debe estar mal en el código que has puesto, efectivamente cuando usas el setContentView puedes pasar un Layout o una clase, pero esa clase tiene que heredar de "View". Lo que significa que al construirla debes COMO MÍNIMO, pasarle un Context por parámetro.

Es decir, el código debería ser tal que así:

setContentView(new ClaseJava(this));

Porque Activity es un Context. A partir de aquí, si quieres finalizar la Activity desde ClaseJava, nada más fácil:

((Activity)getContext()).finish();

Realmente, y según los sitios donde uses ClaseJava, para ahorrarte algún que otro ClassCastException deberías hacer esto:

if (getContext() instanceof Activity)
((Activity)getContext()).finish();


Muchas gracias, tu solución me ha servido.
Efectivamente, a mi ClaseJava tengo que pasarle el context, se me olvido ese detalle en el código.

Un saludo