Spanish [SOLUCIONADO] Volver a la Activity anterior

vbmundo

Well-Known Member
Licensed User
Hola,

Como puedo hacer para volver a la Activity anterior sin tener que hacer un nuevo StartActivity ?

y una vez en la anterior... debo poner código en Activity_Resume para refrescar la información ?

Gracias
 

Descartex

Well-Known Member
Licensed User
Longtime User
Muy buenas.
Supongamos que tienes dos activities, 1 y 2.
Desde el 1 abres el 2.
Si cuando abriste el 2, en el 1 no hiciste Activity.Finish, al hacer en 2 Activity.Finish, vuelves al 1 con los datos que tenias. Si los quieres refrescar, simplemente pones el codigo de refresco en Activity_Resume del Activity 1.
Para controlar si entró en Activity_Resume por volver de otro activity o despues de una inactividad del dispositivo, puedes poner una variable global, la cual manejas a tu antojo, por ejemplo:
B4X:
StartActivity(Activity2)
DesdeActivity=True
Y en el Activity_Resume del Activity 1:
B4X:
Sub Activity_Resume
If DesdeActivity Then
' Codigo de refresco
Else
' Codigo que se ejecutará en caso de volver de inactividad, salida voluntaria, etc.
End If

End Sub

Espero no haberte liado más.
Un saludo.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Pablo

Como puedo hacer para volver a la Activity anterior sin tener que hacer un nuevo StartActivity ?

Cuando le das al boton Esc vuelves a la actividad anterior sin necesidad de hacer un activity.finish

y una vez en la anterior... debo poner código en Activity_Resume para refrescar la información ?

Si en el activity que dejas tiene influencia sobre el que estas y necesitas poner datos cogidos en ese si, si no el propio Android te refresca todo.

Mirate esto: https://www.b4x.com/android/forum/t...ia-rápida-del-ciclo-de-vida-de-android.38760/
Se que me dijiste que lo habias leido, pero te recomiendo que lo hagas de nuevo, ahi veras las secuencias del ciclo de vida. También cree una chuleta para que ahora al principio la puedas tener a mano.
Para el caso que preguntas es este:

SALES PULSANDO BOTÓN HARD BACK -> Activity_Pause (Userclosed=True) (del activity que sales)
VUELVES DESDE OTRO ACTIVITY -> Main va a Activity_Resume

Te recomiendo que crees un proyecto sin nada pero con dos activity, y pongas LOG en el Create, Pause, Resume y pongas los valores de FirstTime y UserClosed de los dos activity, y en el main creas el evento Sub activity_Click para llamar al otro activity y asi no crear boton, y pruebas a llamar al otro activity, girar, etc, así veras como se comporta el ciclo de vida, algo asi:

B4X:
Sub Activity_Create(FirstTime As Boolean)
 LogColor("Create de Main FirstTime: " & FirstTime,Colors.Blue )

En Sub

Sub Activity_Resume
  LogColor("Activity_Resume",Colors.Blue)
En Sub

Sub Activity_Pause (UserClosed As Boolean)
  LogColor(" Activity_Pause UserClosed : " & UserClosed,Colors.Blue) 
En Sub

Sub activity_Click
  LogColor("activity_Click antes de la llamada",Colors.Blue)
  StartActivity(Activity2)
  LogColor("activity_Click despues de la llamada",Colors.Blue)
End Sub

Ya se que el LOG del sistema te dice todo esto, pero con colores lo veras mejor, y en el activity 2 pones diferente color de log y asi de un golpe de vista lo ves todo.

Te recomiendo que pongas tambien LOG en los Sub Process_Globals y Sub Globals de los dos activity, veras cosas curiosas ;)

Saludos
 

vbmundo

Well-Known Member
Licensed User
Bueno Jesus

he hecho la prueba de los 2 activitys... es realmente muy interesante, sobre todo porque vi un comportamiento que no esperaba... al menos no lo hubiera imaginado así..

Y es que en el Click del 2do Activity puse un "Activity.Finish" lo cual logra un Pause y luego vuelve al primer Activity

Pero lo que me ha descolocado es que al volver a hacer click en el primer Activity, el valor de FirstTime no es TRUE

Yo imaginaba que al ser acabado con FINISH, el Activity entero se descargaba, pero esto es peligroso... porque si ponemos mucho código en el FirstTime pensando que cada vez que se entre en el Activity mediante StartActivity se ejecutará y es FALSO.

Muchas Gracias Jesus.. me ha sido de mucha ayuda.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Pablo

Me alegro que te haya servido mi ejemplo, te dije que probaras de poner logs en los globals por que verias cosa interesantes, create un servicio, modulo de clase, etc, vacio sin utilizar y veras que la secuencia de arranque no es la que esperas.
No hace mucho escribí un post a este respecto: https://www.b4x.com/android/forum/threads/informaciÓn-sobre-el-módulo-de-servicio-starter.66596/

Yo imaginaba que al ser acabado con FINISH, el Activity entero se descargaba

No, Android lo deja en segundo plano para cargarlo rapidamente, pero no es tan peligroso, create una variable global para cosas que necesites iniciar solo una vez, y si no utiliza el IsInitialized de los objetos.

Ahora solo falta añadirle el [SOLUCIONAD] ;)

Saludos
 
Top