Italian Intercettare l'evento chiusura visualizzazione di un file pdf

toro1950

Member
Licensed User
Risolto il problema invio mail, grazie a Drgottjr e Sagenut, ora ho un altro problema, la mia app in sviluppo dopo aver scarictao un pdf da un sito, questo viene visualizzato dall'utente, vorrei intercettare l'evento di chiusura di questo, che avviene con la freccia in alto a sx, è possibile farlo? se si come? Grazie a chiunque abbia un pò di pazienza e tempo per farlo
Mario
 

Sagenut

Expert
Licensed User
Longtime User
Così abbiamo poche informazioni per aiutarti.
Come viene visualizzato il file PDF?
Usando una libreria?
Un programma esterno?
Come minimo serve vedere il codice relativo all'apertura del PDF e sapere se usa librerie specifiche.
Quando possibile la cosa migliore è allegare un piccolo progetto di esempio che faccia il minimo per riprodurre il problema o la situazione da verificare.
Il tuo progetto, se è rimasto quello che avevi allegato nell'altra discussione, è di tipo Default con le Activity.
Per esportare il progetto da condividere puoi usare questa icona
export.jpg

Ovviamente se vuoi/puoi condividere il tuo progetto.
Altrimenti cerca di crearne uno nuovo che effettui solo l'apertura del PDF per lavorare su quello.
 

toro1950

Member
Licensed User
Buongiorno a tutta la comunità, condivido volentieri il progetto cosi sarà utile per i novizi come me e per questo ho messo dei remark che
indicano ogni funzione. Mangiando viene l'appetito cosi ora il progetto è BAXpages.
 

Attachments

  • provapag.zip
    31.8 KB · Views: 61

toro1950

Member
Licensed User
Ho risolto in questo modo: ho aggiunto un modulo code dove ho dichiarato una variabile booleana, che alla visualizzazione del pdf viene la imposto a true, nella main in Activity_Resume con la variabile a true e dietro un msbox2 con risposta positiva apro la page2
B4XPages.ShowPage("page2").
 

Sagenut

Expert
Licensed User
Longtime User
Ho risolto in questo modo: ho aggiunto un modulo code dove ho dichiarato una variabile booleana, che alla visualizzazione del pdf viene la imposto a true, nella main in Activity_Resume con la variabile a true e dietro un msbox2 con risposta positiva apro la page2
B4XPages.ShowPage("page2").
Se stai iniziando a lavorare con le B4XPages non devi più toccare la Activity Main, salvo rari casi dove và impostato qualcosa che poi va gestito dalle Pages.
Quindi credo che comunque ci sarà da rivedere qualcosa.
Se però funziona, direi che è una buona cosa.
Stai facendo pratica ed è normale passare da queste cose. :)
 

toro1950

Member
Licensed User
Nella prima versione Activity avevo risolto con Activity_Resume, con la versione pages mi è sembrato naturale utilizzare nella main la stessa Activity_Resume, dopo aver fatto un pò di fatica a impostare una variabile globale, risolto con um modulo code, ho visto che funziona alla grande, conosci un altro modo migliore per farlo? ben venga. Il msgbox2 l'ho sostituito con Msgbox2Async, ho letto che il primo è deprecato.
 

Sagenut

Expert
Licensed User
Longtime User
Quando avrò tempo guarderò il tuo progetto.
I tuoi dubbi sono più che leciti.
Le B4XPages sono un qualcosa di particolare arrivato dopo.
E sono nate proprio per semplificare alcune cose riguardo al ciclo di vita delle Activity per le app che necessitano di avere più pagine, che una volta sarebbero state più Activity e avrebbero portato a dover gestire molte cose per non fare nascere altri problemi.
Fondamentalmente nelle B4XPages va gestito tutto dal B4XMainpage.
La Activity Main che comunque vedi diventa solo una sorta di contenitore iniziale nel quale vanno fatte rare modifiche, di solito solo per abilitare qualcosa che poi andrà nuovamente gestito dalle Pages.
Detto così è un pó complicato, la pratica e il tempo aiuteranno.
Nel forum troverai anche esempi più vecchi che usavano le Activity.
Ma solito si adatta subito tutto, spesso senza bisogno di modifiche.
 

LucaMs

Expert
Licensed User
Longtime User
Ho scaricato adesso e dato un'occhiata (al volo) al tuo progetto.

Primo consiglio generale è dichiarare tutte le view come B4XView (quando possibile; in alcuni casi, con le custom view, il tipo sarà appunto quello "custom").

Nella B4XMainPage potresti dichiarare una variabile boolean (ad esempio: PDF_Aperto) a livello di classe, impostarla su True subito dopo (o prima) di StartActivity(in) (nella Button4_Click). Poi:

B4X:
Private Sub B4XPage_Foreground
    If PDF_Aperto Then
    Else
    End If
End Sub

In questo modo NON sarai certo che l'utente abbia chiuso la visualizzazione del PDF ma almeno che il file sia stato visto e si sia tornati alla tua app.
 

Sagenut

Expert
Licensed User
Longtime User
Ho risolto in questo modo: ho aggiunto un modulo code dove ho dichiarato una variabile booleana, che alla visualizzazione del pdf viene la imposto a true, nella main in Activity_Resume con la variabile a true e dietro un msbox2 con risposta positiva apro la page2
B4XPages.ShowPage("page2").
Non essendo un esperto potrebbe esserci un modo migliore.
Però dopo aver fatto qualche prova il tuo metodo sicuramente è funzionale.
E magari è anche quello giusto.
Perchè comunque l'evento che viene lanciato è proprio l'Activity Resume.
Nel Main della Activity ho messo
B4X:
Sub Process_Globals
    Public ActionBarHomeClicked As Boolean
    Private xui As XUI
    Public PDFOpen As Boolean = False
End Sub
Nella Activity_Resume
B4X:
Sub Activity_Resume
    B4XPages.Delegate.Activity_Resume
    If PDFOpen = False Then
        Log("NESSUN PDF APERTO")
    Else
        Log("HANNO CHIUSO UN PDF!")
        PDFOpen = False
        B4XPages.ShowPage("page2")
    End If
End Sub
E nel Button che mostra il PDF
B4X:
Main.PDFOpen = True
subito dopo lo StartActivity(in).
Il mio dubbio era perchè ancora non sapevamo come aprivi il PDF.
Ma qualcuno più esperto potrebbe portare altre soluzioni.
 

Sagenut

Expert
Licensed User
Longtime User
Forse l'unico problema potrebbe essere che se il processo della tua app viene chiuso dal sistema, perchè il PDF è lungo da leggere o l'utente si mette a fare altro, poi potrebbero esserci comportamenti imprevisti.
Una soluzione potrebbe essere quella di creare un file vuoto (ad esempio pdfaperto.txt) anzichè usare la variabile Boolean.
In questo modo se la tua app fosse stata chiusa durante la lettura del PDF, questa potrebbe ripartire correttamente dalla seconda pagina verificando l'esistenza del file.
E ovviamente cancellandolo alla apertura della Page2.
 

Sagenut

Expert
Licensed User
Longtime User
Piccolo Fuori Tema:
per esportare Progetti B4XPages non devi usare l'icona del pacco regalo, ma questa linea
B4X:
'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip
che diventa cliccabile tenendo premuto CTRL.
Ma prima ricorda di cambiare il nome Project.zip in qualcosa relativo alla tua app tipo LaMiaApp.zip
Nel tuo progetto non l'ho vista, magari l'hai cancellata per errore.
 

toro1950

Member
Licensed User
ti ringrazio per i consigli, piano piano imparerò ho scaricato B4A solo il 13 Agosto e grazie a voi e soprattutto a te
ho quasi completato la prima app, dopo scaricherò B4I per convertirlo in IOS. Per completare questa devo vedere per i database,
il compilatore che uso per i programmi per pc windows e per Mac utilizza database SQLite quindi non dovrei avere molti problemi,
sicuramente all'inzio avrò bisogno del vostro aiuto
per il tuo post predente:
E così ho fatto, ho solo aggiunto la scelta per l'utente di farlo o meno tramite un
B4X:
If MOD3.pdfopen =True Then
         Msgbox2Async("Vuoi ......", "Richiesta", "Si", "", "No", Null, False)
        Wait For Msgbox_Result (Result As Int)
                        If Result = DialogResponse.Positive Then
            MOD3.pdfopen = False
            B4XPages.ShowPage("page2")
        Else
            MOD3.pdfopen = False
        End If
    End If
in questo modo funziona in qualsiasi modo sia stato aperto il pdf, il mio cellulare ha un app predefinita, quello di mia moglie fa scegliere l'app con cui aprirlo, infine solo dopo avere visionato il pdf viene richiesta la scelta, comunque grazie a voi tutti
 

Sagenut

Expert
Licensed User
Longtime User
ti ringrazio per i consigli, piano piano imparerò ho scaricato B4A solo il 13 Agosto e grazie a voi e soprattutto a te
ho quasi completato la prima app, dopo scaricherò B4I per convertirlo in IOS. Per completare questa devo vedere per i database,
il compilatore che uso per i programmi per pc windows e per Mac utilizza database SQLite quindi non dovrei avere molti problemi,
sicuramente all'inzio avrò bisogno del vostro aiuto
per il tuo post predente:
E così ho fatto, ho solo aggiunto la scelta per l'utente di farlo o meno tramite un
B4X:
If MOD3.pdfopen =True Then
         Msgbox2Async("Vuoi ......", "Richiesta", "Si", "", "No", Null, False)
        Wait For Msgbox_Result (Result As Int)
                        If Result = DialogResponse.Positive Then
            MOD3.pdfopen = False
            B4XPages.ShowPage("page2")
        Else
            MOD3.pdfopen = False
        End If
    End If
in questo modo funziona in qualsiasi modo sia stato aperto il pdf, il mio cellulare ha un app predefinita, quello di mia moglie fa scegliere l'app con cui aprirlo, infine solo dopo avere visionato il pdf viene richiesta la scelta, comunque grazie a voi tutti
Direi che hai fatto benissimo, meglio di me.
Per quanto riguarda la conversione per IOS non posso aiutarti e ti faccio i miei migliori auguri.
Più che altro per i costi.
Ma se hai l'esigenza di pubblicare per entrambi i sistemi direi che non hai scelte. :) :) :)
 
Top