Italian B4XPages - (scarso) Tutorial in italiano

LucaMs

Expert
Licensed User
Longtime User
1) Che metodo è "Fill"? Non riesco a trovarlo
Ci credo, era solo un esempio, se io avessi un metodo (Sub) Fill nella mia pagina PageProdotti (che potrebbe riempire (fill) una xCLV con i dati dei prodotti).


2) Non è più semplice/comodo/breve usare appunto la sua ID così?
B4X:
PgProdotti.Fill

"PgProdotti" è solo un testo che fa da ID/chiave per accedere alla pagina, come una chiave di una Map consente di accedere al valore ad essa associato, valore che potrebbe essere di qualunque tipo, quindi anche un oggetto, quindi anche una pagina (e in effetti è possibilissimo che nella libreria le pagine vengano conservate proprio in una Map)
Si può usare così:
B4X:
B4XPages.GetPage("pgProdotti")
A quel punto, però, aggiungendo un punto NON vedresti tutti i membri della PageProdotti, perché in quel momento l'editor non può sapere cosa ti verrà restituito a runtime (uhm... spiegazione non eccelsa, ma non sono mica un prof ? ). Dovresti scrivere:
B4X:
'pagProdotti è il nome della classe
B4XPages.GetPage("pgProdotti").As(pagProdotti).[qui vedresti tutti i membri dell'oggetto PageProdotti]


Altro dubbio:
L'utilità di AddPageAndCreate rispetto ad AddPage serve solo quando devo riferirmi a controlli presenti nella pagina (se non uso Create i controlli non esisterebbero ancora...). E' questo il motivo?
Esatto. Se usi AddPageAndCreate, subito dopo puoi avere accesso a tutti i membri, le view e variabili pubbliche di quell'oggetto-pagina (lo scrivo così, in modo che sia sempre chiaro che una pagina è un oggetto, creato in base alla classe B4XPage)
In pratica è come se tu mandassi in esecuzione sia la Sub Initialize che la B4XPage_Create di quella pagina; anzi, è proprio ciò che accadrà.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
E comunque, ti sei già fermato con sto tutorial?
No, c'è sicuramente tanto altro da dire, ma non avendo "studiato" come fare questo tutorial, me lo stavo domandando.
Credo che inizierò a cercare nel forum domande al riguardo, iniziando da quello italiano. Trovati i dubbi, scriverò dell'argomento in particolare.

E' fatto benissimo altro che scarso!
Grazie ma mi pare fatto malissimo, proprio perché prima di iniziarlo avrei dovuto studiare una sorta di struttura.
 

LucaMs

Expert
Licensed User
Longtime User
No, c'è sicuramente tanto altro da dire, ma non avendo "studiato" come fare questo tutorial, me lo stavo domandando.
Credo che inizierò a cercare nel forum domande al riguardo, iniziando da quello italiano. Trovati i dubbi, scriverò dell'argomento in particolare.
Un altro modo potrebbe essere quello di scrivere i passaggi per creare il progetto ipotizzato (Prodotti), ma non è detto che facendolo si dovrebbero affrontare tutte le caratteristiche delle B4XPage e della loro gestione.

Boh, magari metto su la moka e ci penso un po' ?
 

Sabotto

Well-Known Member
Licensed User
"PgProdotti" è solo un testo che fa da ID/chiave per accedere alla pagina, come una chiave di una Map consente di accedere al valore ad essa associato, valore che potrebbe essere di qualunque tipo, quindi anche un oggetto, quindi anche una pagina (e in effetti è possibilissimo che nella libreria le pagine vengano conservate proprio in una Map)
Si può usare così:
B4X:
B4XPages.GetPage("pgProdotti")
Scusami, ho sbagliato a scrivere. Volevo dire: non è piu facile accedere cosi?

B4X:
pgProdotti.Fill ' errato perchè è un ID'
pagProdotti.Fill ' intendevo cosi, usando l'oggetto, l'istanza.
 

LucaMs

Expert
Licensed User
Longtime User
Scusami, ho sbagliato a scrivere. Volevo dire: non è piu facile accedere cosi?

B4X:
pgProdotti.Fill ' errato perchè è un ID'
pagProdotti.Fill ' intendevo cosi, usando l'oggetto, l'istanza.
Si, ma avrai dichiarato e creato l'oggetto da in qualche parte del progetto, per cui dovrai scrivere prima quella "parte" (di solito è la B4XMainPage, quindi si farà come detto precedentemente).
 

Sabotto

Well-Known Member
Licensed User
Ah, certo. Si io mi riferivo a un'istanza creata nello stesso modulo.
A proposito sempre di B4XPages ho appena fatto una domanda qui su un esempio postato da Klaus sulle B4xPages.
Magari puoi delucidarmi tu se non rispondono lì...
 

LucaMs

Expert
Licensed User
Longtime User
Ah, certo. Si io mi riferivo a un'istanza creata nello stesso modulo.
A proposito sempre di B4XPages ho appena fatto una domanda qui su un esempio postato da Klaus sulle B4xPages.
Magari puoi delucidarmi tu se non rispondono lì...
Dalla domanda che hai posto lì, sembra solo un "errore logico". Per saperne di più dovrei scaricare il progetto di Klaus (probabilmente tra non molto lo farò).
 

LucaMs

Expert
Licensed User
Longtime User
Per saperne di più dovrei scaricare il progetto di Klaus (probabilmente tra non molto lo farò).
Questa variabile:

Public MP As B4XMainPage

scritta nella B4XMainPage non viene proprio utilizzata (metti il cursore su MP e premi F7, vedrai dove venga usata; tranne nell'assegnazione:

MP = B4XPages.MainPage

non c'è altro).

Nelle altre due pagine suppongo gli serva per comodità, in quanto sono solo due caratteri. Sono comunque variabili che puntano allo stesso oggetto, cioè se modificassi qualcosa nella MP (privata o pubblica che sia) in un delle altre due pagine, le modifiche verrebbero comunque apportate all'unica B4XMainPage.
 

Sabotto

Well-Known Member
Licensed User
Questa variabile:

Public MP As B4XMainPage

scritta nella B4XMainPage non viene proprio utilizzata (metti il cursore su MP e premi F7, vedrai dove venga usata; tranne nell'assegnazione:

MP = B4XPages.MainPage

non c'è altro).

Nelle altre due pagine suppongo gli serva per comodità, in quanto sono solo due caratteri. Sono comunque variabili che puntano allo stesso oggetto, cioè se modificassi qualcosa nella MP (privata o pubblica che sia) in un delle altre due pagine, le modifiche verrebbero comunque apportate all'unica B4XMainPage.
Si infatti mi ha risposto che era un refuso. La versione corretta e anche pìù cmpleta è nei codici di esempio dei booklets
 

Fulvio75

Well-Known Member
Licensed User
?
dopo numerosi tentativi e prove sono a capo come prima, non mi entrano in testa non so cosa farci, per me sono troppo incasinate più semplici le Activity...
Hai spiegato benissimo ma non mi entrano in testa sono troppo laboriose☹️
 

LucaMs

Expert
Licensed User
Longtime User
?
dopo numerosi tentativi e prove sono a capo come prima, non mi entrano in testa non so cosa farci, per me sono troppo incasinate più semplici le Activity...
Hai spiegato benissimo ma non mi entrano in testa sono troppo laboriose☹️
Credo di intuire il motivo per cui ti sembrino molto più semplici le Activity.

Quando scrivi codice in un'Activity e carichi layout in essa, non devi:
  1. Dichiarare IN QUALCHE PUNTO DEL PROGETTO un OGGETTO ACTIVITY, lo fa B4A per te, a tua insaputa.
  2. Creare un panel di base che conterrà le view (il layout, normalmente)
Quindi, con (1), ti basterebbe scrivere: StartActivity(NomeActivity). Ma NomeActivity è il nome di un OGGETTO di tipo Activity, di una VARIABILE creata a tua insaputa e riconosciuta globalmente, mentre una variabille-oggetto di tipo B4XPage devi dichiararla ed inizializzarla tu, IN QUALCHE PUNTO DEL PROGETTO (solitamente nella B4XMainPage).
Non ti è chiaro, secondo me, il concetto di classe->oggetto. Approfondisci questo, dato che è valido e indispensabile in tutti i linguaggi di programmazione ("orientati agli oggetti"; praticamente tutti).

Per quanto riguarda il (2), le B4XPage hanno il loro panel di base, cui ci si riferisce tramite la variabile globale Root; tutto qui!
 

Fulvio75

Well-Known Member
Licensed User
Nei miei progetti uso x Activity perché 'simulo' diverse pagine e da queste Activity attraverso dei bottoni apro delle Activity figlio, ognuna di queste ha un suo layout.
Quindi in B4Xpage devo metterle tutte su b4xmainPage con add e poi richiamarle da lì?
Oggi ci riprovo con un nuovo progetto poi scrivo ciò che non riesco a fare
 

LucaMs

Expert
Licensed User
Longtime User
Nei miei progetti uso x Activity perché 'simulo' diverse pagine e da queste Activity attraverso dei bottoni apro delle Activity figlio, ognuna di queste ha un suo layout.
Quindi in B4Xpage devo metterle tutte su b4xmainPage con add e poi richiamarle da lì?
Oggi ci riprovo con un nuovo progetto poi scrivo ciò che non riesco a fare
Posso darti un... "compito a casa"? (uhm... sono passati circa 130 anni e adesso mi pare di ricordare che da bambino volessi fare il maestro - elementari. O il prete?)

Crea un "normale" progetto B4A, quindi NON B4XPages. Chiamalo: "Persone".

In qualunque Activity, che aggiungerai in seguito, "dovrai" poter usare N "oggetti persona"; diciamo 3, per semplicità.
Un "oggetto persona" dovrà avere le proprietà:
  • Nome
  • Cognome
  • Eta
ed il metodo: Dice (italiano, eh, non l'inglese ? ?). Gli si passerà il testo da "pronunciare", che verrà semplicemente scritto con un Log(Testo).
Usa una struttura per conservare tutti e 3 gli "oggetti persona". Potresti metterli in una List o in un Array, ma ti chiedo di metterli in una Map (mapPersone).

Crea una seconda Activity, chiamala: "actQualcosa".

Fatto questo, pubblica qui il progetto creato; poi lo "completeremo".
 

Fulvio75

Well-Known Member
Licensed User
Allora... ora inizio un nuovo progetto:

questa roba quì:

#Region B4XPages declarations

#end region

visto che uso N pagine non so quante per ogni app, la devo sempre mettere?
 
Top