Spanish [SOLUCIONADO] Problema con hilo de ejecucion al ejecutar StartActivity

Edu Portu

Member
Licensed User
Hola a todos,

Segun el manual de B4A, en StartActivity pone "After this call the current activity will be paused and the target activity will be resumed."

Pues bien, yo llamo a una activity nueva que me tiene que devolver un dato, el codigo es el siguiente

B4X:
    If Tipo = "Alta" Then
        StartActivity(BuscaClientes)
        LblCliente.Text = Main.gResultBuscaClientes
    End If

Es decir si estamos creando ("alta") un pedido nuevo lo primero llamo a la busqueda de clientes y despues cargo el cliente en un label, pero el label siempre esta a cero, es como si despues del StartActivity se siguiese ejecutando el codigo (el dato lo devuelve correctamente a la variable gResultBuscaClientes, ya que he añadido un boton para que lo muestre despues y muestar el codigo de cliente correcto).

Existe alguna manera de que pare la ejecucion del codigo hasta que se termine el Activity que hemos llamado? algo asi como un StarActivity modal?

Saludos y muchas gracias
Edu
 

bgsoft

Well-Known Member
Licensed User
Hola Edu, tu mismo te contestas con:
After this call the current activity will be paused and the target activity will be resumed

Tu segunda linea la tienes que poner en el Pause, claro, lo mejor es que emplees una variable global para saber que ha salido del otro activitity, ya que en pause entra por diferentes motivos, leete este pequeño tutorial donde explica el ciclo de vida de android:
http://www.basic4ppc.com/android/fo...ia-rápida-del-ciclo-de-vida-de-android.38760/

Saludos
 

Edu Portu

Member
Licensed User
Gracias bgsoft, ya le habia echado una ojeada al ciclo de vida, pero que pasa con las instrucciones que hay despues del StartActivity?:

1.- Se siguen ejecutando hasta acabar la rutina?

Si es asi podria poner como dices unas variables globales para saber cuando sale del startactivity y esperar con un bucle para seguir ejecuntando la instruccion

B4X:
LblCliente.Text = Main.gResultBuscaClientes

2.- Se sale directamente nada mas ejecutar el StartActivity y se pierden?

Es decir, segun mi codigo la linea

B4X:
LblCliente.Text = Main.gResultBuscaClientes

nunca se ejecutaria no? Al llamar al StarActivity se pasaria siempre directamente al Activity_Pause sin ejecutarla y a la vuelta volveria a Activity_Resume?
 

Edu Portu

Member
Licensed User
Me respondo a mi mismo, la opcion es la 1, se sigue ejecutando la rutina hasta el final, con lo que con variables globales y un bucle podria esperar a que elija el cliente y luego asiganarlo.

Muchas gracias por todo. Saludos
Edu
 

bgsoft

Well-Known Member
Licensed User
Hola

Ya que te has contestado tu mismo , añadele al titulo [SOLUCIONADO] y asi ayudarás a otros foreros.

Te recomiendo que emplees una variable global y la consultes en el Resume, si despues de la llamada metes un bucle de espera, aunque metas Doevents, puede que algunas cosas en el formulario que llames no te funcionen, eso por no contar que se te va a relentizar todo.

Y es algo tan facil como esto (basado en tu ejemplo):

B4X:
If Tipo = "Alta"Then
  EstoyFueraDeMain = true
  StartActivity(BuscaClientes)
end if


Sub Activity_Resume

  if EstoyFueraDeMain then
     EstoyFueraDeMain = false
     LblCliente.Text = Main.gResultBuscaClientesEndIf
  end if

Saludos
 

Edu Portu

Member
Licensed User
Pues no consigo dar con la solucion, si meto un bucle despues del StartActivity el programa se bloquea aunque tenga dentro un DoEvents

B4X:
    Main.gInRutas = True
     StartActivity(Rutas)
     Do While (Main.gInRutas = True)
      DoEvents
     Loop
     LblCliente.Text = Main.gMaesRut
 

Edu Portu

Member
Licensed User
Muchas gracias bgsoft, justo me has respondido lo que yo te iba a poner.. el tema se ralentiza... Voy a probar tu ejemplo.
 

Edu Portu

Member
Licensed User
Efectivamente hay que meter una variable global y tratarlo en el RESUME que es cuando vuelve despues de la llamada al STARTACTIVITY...

Muchas gracias por la ayuda
Edu
 
Top