Android Question B4XPages.ShowPage acts as a Resumable Sub but actually isn't

Alessandro71

Well-Known Member
Licensed User
Longtime User
consider the following sample code
B4X:
B4XPages.ShowPage("ConfigWizardPage")
ConfigWizardHasBeenShown = True
code flow continues immediately after line 1
line 2 is executed just after ShowPage as been called just as ShowPage woud be a Resumable Sub
my intended code flow would be just like
B4X:
Wait For (B4XPages.ShowPage("ConfigWizardPage")) Complete (unused As Boolean)
ConfigWizardHasBeenShown = True
so that line 2 would be executed after the "ConfigWizardPage" has been shown and the ClosePage(Me) from that page has been called
is there a simple way to achieve that?
 
Solution
Check the attached B4A example.

B4X:
Public Sub Show(Callback As Object)
    mCallback = Callback
    B4XPages.ShowPage(B4XPages.GetPageId(Me))
End Sub

Private Sub B4XFloatTextField1_EnterPressed
    RaiseEvent(B4XFloatTextField1.Text)
    B4XPages.ClosePage(Me)
End Sub

Private Sub B4XPage_CloseRequest As ResumableSub
    Log("CloseRequest")
    RaiseEvent("")
    Return True
End Sub

Private Sub RaiseEvent(Text As String)
    CallSubDelayed2(mCallback, "InputPage_Complete", Text)
End Sub

Usage:
B4X:
Private Sub Button1_Click
    ip.Show(Me)
    Wait For InputPage_Complete (Text As String)
    B4XPages.SetTitle(Me, Text)
End Sub

toby

Well-Known Member
Licensed User
Longtime User
so that line 2 would be executed after the "ConfigWizardPage" has been shown and the ClosePage(Me) from that page has been called
is there a simple way to achieve that?
This is because B4XPages.ShowPage() is not defined as a resumableSub; it returns a string instead
 
Upvote 0

Alessandro71

Well-Known Member
Licensed User
Longtime User
Searching for examples of raising an event and wait for it elsewhere, in the forum, right now, with little success…
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
Check the attached B4A example.

B4X:
Public Sub Show(Callback As Object)
    mCallback = Callback
    B4XPages.ShowPage(B4XPages.GetPageId(Me))
End Sub

Private Sub B4XFloatTextField1_EnterPressed
    RaiseEvent(B4XFloatTextField1.Text)
    B4XPages.ClosePage(Me)
End Sub

Private Sub B4XPage_CloseRequest As ResumableSub
    Log("CloseRequest")
    RaiseEvent("")
    Return True
End Sub

Private Sub RaiseEvent(Text As String)
    CallSubDelayed2(mCallback, "InputPage_Complete", Text)
End Sub

Usage:
B4X:
Private Sub Button1_Click
    ip.Show(Me)
    Wait For InputPage_Complete (Text As String)
    B4XPages.SetTitle(Me, Text)
End Sub
 

Attachments

  • Project.zip
    16.1 KB · Views: 234
Upvote 0
Solution
Top