Italian Domanda su b4xpages.add

MroBurk

Member
Licensed User
Scusate la domanda che può essere banale ma è per avere una precisazione.... ho 3 activities: B4xMainpage, page 2 e page3. Per visualizzare la page 2 è necessario inserire il codice di sotto... giusto? Ora, Se volessi accedere da page3 a page 2 dovrei riscrivere lo stesso codice (per page2) o posso abbreviare il flow richiamando il codice inserito magari nella B4xMainPage? Mi è venuto questo dubbio, perchè se in una App ho uno slidemenu, dovrei ricopiare lo stesso codice su ogni activity per ogni Item dello slidemenù? o basta richiamarlo?
B4X:
Sub Class_Globals
  
    Private Root As B4XView
    Private page2a As page2
    Private page3a As page3

End sub

Private Sub B4XPage_Created (Root1 As B4XView)
  
    Root = Root1
    Root.LoadLayout("Layout")
    page2.Initialize
    page3.Initialize
    B4XPages.AddPageAndCreate("page2",page2a)
    B4XPages.AddPageAndCreate("page3",page3a)
  
End Sub
  

Private Sub page2Btn_Click
    B4XPages.ShowPage("page2")
End Sub

Private Sub page3Btn_Click
    B4XPages.ShowPage("page3")
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
Sempre per precisare, su b4xpages non hai 3 activities ma una sola con 3 pagine.

La domanda è mal posta. Vedi questo esempio
 

MroBurk

Member
Licensed User
mi spiace se non mi sono spiegato, comunque grazie, quindi basta inserire 1 sola volta b4xpages.add("page(n)") e poi richiamarla in altra pagine grazie a b4xpages.get...
 

Star-Dust

Expert
Licensed User
Longtime User
E' necessario inserire B4XPages.AddPageAndCreate (non Add) nella MainPage
Poi nelle altre pagine usi B4XPages.ShowPage (non b4xpages.get...)
 

MroBurk

Member
Licensed User
scusami non sono stato chiaro neanche stavolta... intendevo nella sub B4xpage_create... non bisogna più inizializzare e aggiungere B4XPages.add ma inserire il comando .get e nel Btn .showpage.
grazie mille!!
 

Attachments

  • get.PNG
    get.PNG
    9.2 KB · Views: 104

Star-Dust

Expert
Licensed User
Longtime User
Adesso non ho capito niente, va importante che ti funziona
 

LucaMs

Expert
Licensed User
Longtime User
Private page2a As page2
Capisco, ovviamente che sia un esempio

Malgrado questo, ti suggerirei di usare nomi con prefissi "particolari", per poter distinguere le classi-pagine dagli oggetti-pagine (le variabili che nell'esempio hai chiamato page2a e page3a).
Solo come esempio, potresti chiamare le classi: pgcMaster, pgcDetails, pgcIndirizzi, ... ovvero col prefisso "pgc" che potrebbe stare per PaGeClass, e gli oggetti-pagina semplicemente col prefisso "pag", quindi pagMaster, pagDetails...
O qualunque prefisso piaccia a te, ma utile, intuitivo e "distintivo".

Private page2a As page2
Private page3a As page3
Ti conviene dichiararle come Public; in questo modo saranno accessibili da dovunque. Ad esempio, se hai page3a visualizzata e vuoi eseguire una routine (sub) pubblica della page2a o accedere a una View pubblica della page2a [cosa che non si può fare con le Activity, con le B4XPage sì], potresti scrivere:
B4X:
B4XPages.MainPage.page2a.NomeSub

B4XPages.MainPage.page2a.edtImporto = 100


E' necessario inserire B4XPages.AddPageAndCreate (non Add) nella MainPage
Non so bene perché @Star-Dust abbia scritto questo; probabilmente non ho letto bene i post precedenti (oh, è pure tarduccio) ma non è una regola generale, anzi.
Infatti, come norma dovresti usare .AddPage(...), non .AddPageAndCreate(...).
La differenza tra i due metodi è che il secondo fa sì che venga eseguita anche la routine-evento B4XPage_Created, il primo no. Dato che, normalmente, è in questa routine che carichiamo il layout della pagina, in questo modo le View saranno "subito" disponibili; il "contro" è che il metodo sarà più lento, per lo stesso motivo (LoadLayout).

Un altro suggerimento potrebbe essere: nella B4XMainPage potresti anche scrivere delle costanti (o variabili ma meglio le costanti) pubbliche con gli ID delle pagine.
Ad esempio, mettiamo che tu abbia una classe-pagina pgcDetails:
B4X:
Public pagDetails As pgcDetails
Public Const ID_DETAILS As String = "Details"
'
'
B4XPages.AddPage(ID_DETAILS, pagDetails)
.
.

Da qualunque parte del progetto:
B4X:
B4XPages.ShowPage(B4XPages.MainPage.ID_DETAILS)
Questo perché così non dovrai ricordare le stringhe ID di pagina, le otterrai elencate dopo il punto di B4XPages.MainPage., e tantomeno potrai sbagliare a digitarle.
[Questa sopra è una regola generale: evitare di scrivere "literals" nel sorgente; usare sempre variabili o costanti].

Per lo "slide menu", usa questo:
https://www.b4x.com/android/forum/threads/solved-b4xdrawer-and-b4xpages-in-class.138771/post-878751



(Dopo tutto questo... davvero dovrei fare dei video-tutorial sulle B4XPages? 😄)
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Non so bene perché @Star-Dust abbia scritto questo; probabilmente non ho letto bene i post
Perché il metodo Add non esiste, C'è AddPage e AddPageAndCreate (che lo preferisco)
Intendevo questo
 

MroBurk

Member
Licensed User
grazie mille per le delucidazioni!!
(Dopo tutto questo... davvero dovrei fare dei video-tutorial sulle B4XPages? 😄)
@LucaMs .. Si, se potessi sarebbe un ottima idea soprattutto perchè rimarrebbe nell'archivio e se qualcuno come me alle prime armi volesse cominciare a scrivere con B4x, avrebbe il tuo video come riferimento. Inoltre come ti dicevo sarebbe interessante capire come utilizzare le B4xpages con customlistview e altri oggetti... grazie ancora
 

Sagenut

Expert
Licensed User
Longtime User
Inoltre come ti dicevo sarebbe interessante capire come utilizzare le B4xpages con customlistview e altri oggetti... grazie ancora
Beh.... Questo lo dovresti avere già visto nell'esempio postato nell'altra discussione sull'internazionale. ;)
Il mio esempio non era corretto rispetto alla tua domanda iniziale.
Però è basato sulle B4XPage.
Se prendi la risposta di Erel e cerchi di applicarla al mio esempio otterrai quello che cercavi.
Insieme al metodo di @Mahares per salvare le Map di Lists correttamente.
Poi siamo sempre qui per aiutarti se incontri difficoltà nel farlo.
 
Top