Italian [ solved ]B4A StartActivity con attesa ( Resumable)

Xfood

Expert
Licensed User
Longtime User
Buon Fine settimana a tutti,
ho una applicazioncina dove sto inserendo un bottone tipo filtra lista,
la sub filtra lista e' piu o meno cosi:
B4X:
Sub Menu_Filtro_Click()
    StartActivity(Filtro)
    Msgbox("Fitroattivo",Global.FiltroAttivo)
      
End Sub
vorrei aspettare la fine dell'activity filtro, invece il msgbox viene lanciato subito dopo l'activity filtro.
come posso fare in modo che aspetto la fine dell'activity e poi proseguire con i comandi filtro?
non so se mi sono spiegato bene.
Grazie a tutti per la collaborazione
 

hatzisn

Expert
Licensed User
Longtime User
Stai usando B4XPages? Se la risposta è sì devi utilizzare gli eventi ForeGround e Background della B4XPage credo. Se la risposta è no devi usare la sub Activity_Resume della prima Activity.
 

Xfood

Expert
Licensed User
Longtime User
Stai usando B4XPages? Se la risposta è sì devi utilizzare gli eventi ForeGround e Background della B4XPage credo. Se la risposta è no devi usare la sub Activity_Resume della prima Activity.
Grazie per avermi risposto,
non sto utilizzanzo b4xpage
non ho capito come usare la sub Activity_Resume della prima Activity.

ho una activity main con un bottone filtro,
dentro la click del bottone filtro scrivo:
StartActivity(Filtro)
qui vorrei aspettare la fine dell'activity filtro per proseguire con il codice tipo
if filtroattivo=true the
fai altro
endif
 

LucaMs

Expert
Licensed User
Longtime User
Non puoi fare in quel modo, se non scrivendo qualcosa di "strano" nell'Activity Filtro.

B4X:
Sub Menu_Filtro_Click()
    StartActivity(Filtro)
    Wait For UnaCosaQualsiasi
    '...
End Sub

Nell'Activity Filtro, in una routine che funga da chiusura dell'Activity stessa, ad esempio:
B4X:
Sub btnFine_Click()
    CallSubDelayed(Main, "UnaCosaQualsiasi")
    ' qui puoi, ma non obbligatoriamente, scrivere Activity.Finish
End Sub

Così se è la Main che contiene il Menu_Filtro, altrimenti dovrai fare in maniera leggermente più complicata.
Dichiarare una variabile pubblica di tipo Object nella Process_Globals dell'Activity Filtro - di solito chiamata Callback:

Nell'Activity Filtro:
B4X:
Sub Process_Globals
    Public Callback As Object
    ' ...
End Sub

Sub btnFine_Click()
    CallSubDelayed(Callback, "UnaCosaQualsiasi")
    ' qui puoi, ma non obbligatoriamente, scrivere Activity.Finish
End Sub

' Da qualunque altra Activity:
B4X:
Sub Menu_Filtro_Click()
    Fine.Callback = Me
    StartActivity(Filtro)
    Wait For UnaCosaQualsiasi
    '...
End Sub
 
Last edited:

Xfood

Expert
Licensed User
Longtime User
Non puoi fare in quel modo, se non scrivendo qualcosa di "strano" nell'Activity Filtro.

B4X:
Sub Menu_Filtro_Click()
    StartActivity(Filtro)
    Wait For UnaCosaQualsiasi
    '...
End Sub

Nell'Activity Filtro, in una routine che funga da chiusura dell'Activity stessa, ad esempio:
B4X:
Sub btnFine_Click()
    CallSubDelayed(Main, "UnaCosaQualsiasi")
    ' qui puoi, ma non obbligatoriamente, scrivere Activity.Finish
End Sub

Così se è la Main che contiene il Menu_Filtro, altrimenti dovrai fare in maniera leggermente più complicata.
Dichiarare una variabile pubblica di tipo Object nella Process_Globals dell'Activity Filtro - di solito chiamata Callback:

Nell'Activity Filtro:
B4X:
Sub Process_Globals
    Public Callback As Object
    ' ...
End Sub

Sub btnFine_Click()
    CallSubDelayed(Callback, "UnaCosaQualsiasi")
    ' qui puoi, ma non obbligatoriamente, scrivere Activity.Finish
End Sub

' Da qualunque altra Activity:
B4X:
Sub Menu_Filtro_Click()
    Fine.Callback = Me
    StartActivity(Filtro)
    Wait For UnaCosaQualsiasi
    '...
End Sub
Ottimo Funziona.....
Grazieee
 

hatzisn

Expert
Licensed User
Longtime User
Questo che Luca ha scritto è corretto. Ma anche la soluzione con Activity_Resume è corretta. Intendevo scrivere che con la seconda Activity puoi mettere il valore di filtro magari in JSON in un variable inclusa in Starter service e quando la Activity di filtro sarà chiusa, scrivere in Activity_Resume della prima activity qualcosa come "Se ritorni da filtro Activity prende il valore di filtro dal Starter è usa lo".
 

hatzisn

Expert
Licensed User
Longtime User
Ah, hai trovata la soluzione.
 
Top