Italian [Risolto] [B4A] Tornare alla pagina precedente

Aldo's

Well-Known Member
Licensed User
Buongiorno a tutti.
Ho un'app che ha una serie di pagine successive (pagina 1 che richiama la pagina 2 che richiama la pagina 3).
Quando schiaccio il tasto di sistema di ritorno, invece che tornare alla pagina precedente (da pagina 3 a pagina 2, ecc.) chiude la visualizzazione dell'app e passa alla home del tablet.
Questa cosa succede soprattutto con Android 16.
Vi è capitato? Come la risolvo?
Grazie
 

Sagenut

Expert
Licensed User
Longtime User
Credo sia normale se non hai intercettato e gestito il tasto Back.
Aggiungi la gestione per fare reagire come vuoi la tua app.
 

Aldo's

Well-Known Member
Licensed User
B4X:
Private Sub B4XPage_CloseRequest As ResumableSub
    B4XPages.ClosePage(Me)
    Return True
End Sub

metodo semplice che dovrebbe funzionare (non testato).
Altrimenti, sempre nella CloseRequest, dovresti fare una cosa più complicata, usare ShowPage ricavando la pagina da visualizzare dallo stack delle pagine.
Provo stasera e ti dico
Grazie
 

Aldo's

Well-Known Member
Licensed User
B4X:
Private Sub B4XPage_CloseRequest As ResumableSub
    B4XPages.ClosePage(Me)
    Return True
End Sub

metodo semplice che dovrebbe funzionare (non testato).
Altrimenti, sempre nella CloseRequest, dovresti fare una cosa più complicata, usare ShowPage ricavando la pagina da visualizzare dallo stack delle pagine.
Ho provato e "ciccia".
Nel senso che, come già mi accadeva, con Android 13 tutto ok (ma era già così), con Android 16 invece continua a portare l'acqua in background.
Alla fine le situazioni sono 2:
1) trovo soluzione in questo modo
2) gestisco con un altro tasto. In questo caso sarebbe opportuno rendere inefficace il tasto indietro del sistema. Come si fa?
Grazie
 

Sagenut

Expert
Licensed User
Longtime User
@Aldo's
Prova ad aggiungere questa sub nella Main, inteso proprio la Activity che è alla base dei progetti B4XPages
B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
    Return B4XPages.Delegate.Activity_KeyPress(KeyCode)
End Sub
Questo dovrebbe intercettare i tasti e fare scattare i relativi eventi nelle Pages.
 

Aldo's

Well-Known Member
Licensed User
@Aldo's
Prova ad aggiungere questa sub nella Main, inteso proprio la Activity che è alla base dei progetti B4XPages
B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
    Return B4XPages.Delegate.Activity_KeyPress(KeyCode)
End Sub
Questo dovrebbe intercettare i tasti e fare scattare i relativi eventi nelle Pages.
Provo e ti dico
 

Sagenut

Expert
Licensed User
Longtime User
Dopo vari tentativi, e grazie al supporto di @LucaMs , sono arrivato a questa conclusione:
nella MAIN la sub Activity_KeyPress và modificata in questo modo:

B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
    B4XPages.GetManager.RaiseEvent(B4XPages.GetManager.GetTopPage, "B4XPage_KeyPress", Array(KeyCode))
    Return True
End Sub

e nelle varie Pages servirà

B4X:
Private Sub B4XPage_KeyPress (KeyCode As Int)
    If KeyCode = 4 Then    '4 è il Keycode del tasto Back
        'Quello che deve accadere alla pressione del tasto Back
    End If
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Dopo vari tentativi, e grazie al supporto di @LucaMs , sono arrivato a questa conclusione:
nella MAIN la sub Activity_KeyPress và modificata in questo modo:

B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
    B4XPages.GetManager.RaiseEvent(B4XPages.GetManager.GetTopPage, "B4XPage_KeyPress", Array(KeyCode))
    Return True
End Sub

e nelle varie Pages servirà

B4X:
Private Sub B4XPage_KeyPress (KeyCode As Int)
    If KeyCode = 4 Then    '4 è il Keycode del tasto Back
        'Quello che deve accadere alla pressione del tasto Back
    End If
End Sub
Sempre meglio usare le costanti, quando il "creatore" (non quello lassù, eh 😁) ha la bontà di fornirle:

If KeyCode = KeyCodes.KEYCODE_BACK Then
 

Aldo's

Well-Known Member
Licensed User
Grazie alla soluzione proposta da @Sagenut e corretta da @LucaMs funziona... ma non in Android 16.
Mi spiego meglio: Android 13 tutto perfetto, quando provo con Android 16 tutte le volte che schiaccio il tasto Back va in background senza tornare alla pagina precedente come da istruzioni.
Ho aggiunto anche:
B4X:
Private Sub B4XPage_CloseRequest As ResumableSub
    Return False
End Sub
ma le cose non sono cambiate.
 

Sagenut

Expert
Licensed User
Longtime User
Io ho fatto prove proprio con Android 16.
Nel pomeriggio provo a mandarti un progetto di test da provare.
 

Aldo's

Well-Known Member
Licensed User

LucaMs

Expert
Licensed User
Longtime User
Grazie alla soluzione proposta da @Sagenut e corretta da @LucaMs funziona... ma non in Android 16.
Mi spiego meglio: Android 13 tutto perfetto, quando provo con Android 16 tutte le volte che schiaccio il tasto Back va in background senza tornare alla pagina precedente come da istruzioni.
Ho aggiunto anche:
B4X:
Private Sub B4XPage_CloseRequest As ResumableSub
    Return False
End Sub
ma le cose non sono cambiate.
Prova con un progetto "vuoto", ovvero crea un progetto B4XPages e aggiungi:
B4X:
Private Sub B4XPage_CloseRequest As ResumableSub
    Return False
End Sub
 

Sagenut

Expert
Licensed User
Longtime User
Questo è l'esempio.
Confermo quanto scritto da @Filippo , se nel Manifest imposti Target 36 non funziona.
Ma al momento và ufficialmente impostato a 35.
Fai sapere.
 

Attachments

  • BackKeyTrap.zip
    14.6 KB · Views: 26

Aldo's

Well-Known Member
Licensed User
Questo è l'esempio.
Confermo quanto scritto da @Filippo , se nel Manifest imposti Target 36 non funziona.
Ma al momento và ufficialmente impostato a 35.
Fai sapere.
Sto compilando, entro stasera vi dico.
 
Top