Spanish Como evitar reinicio de activity al girar el dispositivo (B4A)

Hola, estoy haciendo una app en B4A en la que uso un webview, este tiene una pagina inicial, pero al girar el dispositivo recarga de nuevo el activity y me vuelve a la página inicial aunque ya este navegando en otra.
Lo mismo pasa si estas introduciendo datos en un formulario, al girar vuelve a cargar la pagina y pierdes todo lo escrito.

Existe alguna solución para esto?

Gracias.
 

cas6678

Active Member
Licensed User
Longtime User
Hay un tutorial sobre el ciclo de la vida de Android en donde te explica que pasa en cada caso:

https://www.b4x.com/android/forum/t...ia-rápida-del-ciclo-de-vida-de-android.38760/

En tu caso lo que pasa es que:

GIRAS LA PANTALLA -> Activity_Pause (Userclosed=False) -> Activity_Create (FirstTime = False) -> Activity_Resume

Es ahi donde debes evitar que si no es la primera vez que pasas algunas cosas no se vuelvan a ejecutar. Pero si estas empezando, al menos asi lo hago yo, quizas te sea mas facil definir solo un tipo de pantalla en:


B4X:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
o
    #SupportedOrientations: landscape
en vez de 
    #SupportedOrientations: unspecified

Esto esta en las primeras lineas del codigo en los artibutos del proyecto.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola José

Tambien puedes guardar la dirección actual en una variable global, y si por ejemplo cargas la página web en el Create, entonces cargas la url de antes del giro. Para eso puedes emplear cualquiera de los dos eventos que tiene el WebView

B4X:
Sub Process_Globals
Dim NombrePaginaWebActual = "" as String
dim NombrePaginaWebInicial = "www.bgssoft.com" ' :D
' -----------------
' -----------------
' -----------------


Sub Activity_Create(FirstTime As Boolean)

if FirstTime then
  CargarPaginaWeb(NombrePaginaWebInicial)
else
  if NombrePaginaWebActual <> "" then
    CargarPaginaWeb(NombrePaginaWebActual)
  else
    CargarPaginaWeb(NombrePaginaWebInicial) ' o la url que decidas
  End if
End if


' -----------------
' -----------------
' -----------------

Sub CargarPaginaWeb(NombrePágina as string)

  WebView1.LoadUrl(NombrePágina)

End Sub



' Evento del WebView
Sub WebView1_PageFinished (Url As String)

  If Url <> "about:blank" Then NombrePaginaWebActual = Url

End Sub

Esto es un ejemplo simple de volver a cargar la ultima página, como implementarlo en tu código es algo que tu mejor que nadie sabe.

Saludos
 
Muchas gracias a todos por vuestros consejos, ya conseguí que funcione.
Segui las indicaciones de Bsoft y funcionó sin problemas.

Gracias
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola José

Me alegro que lo solucionaras, podrias añadir al título [SOLUCIONADO]? así otro compañero que tenga tu mismo problema podrá encontrarlo facilmente.

Gracias

Saludos
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola José

Arriba a la derecha tienes Thread Tools , y dentro Edit Title

Saludos
 

cas6678

Active Member
Licensed User
Longtime User
Creo que la posibilidad de editar el titulo es solo para "Licensed User"
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Creo que la posibilidad de editar el titulo es solo para "Licensed User"
Si, no me di cuenta que si eres solo miembro no puedes modifcar eso.

Bueno, cuando cambies la licencia lo cambias

Saludos
 
Top