Italian [B4J] è un errore, oppure non ho capito ? (la seconda che hai detto!)

Gianni M

Well-Known Member
Licensed User
Longtime User
è un errore, oppure non ho capito ? (la seconda che hai detto!)
via codice, inserisco in un Pane 5 B4XTextField, tutto ok
poi se ridimensioni la form, il 5°B4XTextField viene spastato in alto;
vedi progetto allegato
 

Attachments

  • caselle.zip
    3.3 KB · Views: 65

LucaMs

Expert
Licensed User
Longtime User
Scarico il progetto, magari capirò meglio, si spera.
Sì, alquanto strano.

Carichi 5 volte un layout in Pane1. OGNI VOLTA, la B4XFloatTextField1 che contiene viene posizionata in alto, come si trova nel layout, e poi spostata.
Quando effettui il resizing del form, è come se il caricamento del layout avvenisse di nuovo e solo per la 5a B4XFloatTextField1.

In pratica hai usato la stessa tecnica suggerita da Erel per le caricare delle custom view:
https://www.b4x.com/android/forum/t...s-how-to-add-programmatically.118037/#content
ma, a quanto pare, in B4J si ottiene quel difetto.

Ti conviene creare un Pane d'appoggio, invisibile, caricarci il layout che contiene la B4XFloatTextField1 e poi spostare questa in Pane1 (vedi progetto allegato)
 

Attachments

  • caselle_lm.zip
    3.4 KB · Views: 66

Gianni M

Well-Known Member
Licensed User
Longtime User
Ti conviene creare un Pane d'appoggio
bene, funziona. grazie!
nei giorni scorsi anche @stevel05 ha suggerito una soluzione simile nel forum inglese;
B4X:
For i = 1 To 5
        Dim P As B4XView = xui.CreatePanel("")
        P.SetLayoutAnimated(0,0,0,240,50)
        P.LoadLayout("casella2")
        Pane1.AddNode(P,300,i*52,240,50)
        B4XFloatTextField1.Text = $"i am ${i} TextField"$
    Next
nel tuo codice c'è un RemoveViewFromParent
B4X:
For i = 1 To 5
        pnAppoggio.LoadLayout("casella2") 'ok qui viene caricato il layout, ma poi non viene utilizzato ? (il pnAppoggio)
        B4XFloatTextField1.mBase.RemoveViewFromParent 'perché questo RemoveViewFromParent ?
        Pane1.AddNode(B4XFloatTextField1.mBase, 0, (i - 1) * 52dip, 240dip, 50dip) 'forse mBase "contiene" il pnAppoggio ?
        B4XFloatTextField1.Text = $"i am ${i} TextField"$
    Next
 

LucaMs

Expert
Licensed User
Longtime User
bene, funziona. grazie!
nei giorni scorsi anche @stevel05 ha suggerito una soluzione simile nel forum inglese;
B4X:
For i = 1 To 5
        Dim P As B4XView = xui.CreatePanel("")
        P.SetLayoutAnimated(0,0,0,240,50)
        P.LoadLayout("casella2")
        Pane1.AddNode(P,300,i*52,240,50)
        B4XFloatTextField1.Text = $"i am ${i} TextField"$
    Next
nel tuo codice c'è un RemoveViewFromParent
B4X:
For i = 1 To 5
        pnAppoggio.LoadLayout("casella2") 'ok qui viene caricato il layout, ma poi non viene utilizzato ? (il pnAppoggio)
        B4XFloatTextField1.mBase.RemoveViewFromParent 'perché questo RemoveViewFromParent ?
        Pane1.AddNode(B4XFloatTextField1.mBase, 0, (i - 1) * 52dip, 240dip, 50dip) 'forse mBase "contiene" il pnAppoggio ?
        B4XFloatTextField1.Text = $"i am ${i} TextField"$
    Next
La mia ha un piccolo vantaggio, trascurabile.
La prima crea un nuovo Pane per ogni custom view (in questo caso B4XFloatTextField1) che, come il mio pnAppoggio, non viene realmente usato, quindi crea 5 Pane superflui contro uno solo della mia soluzione. Non è certo un gran danno, ma se dovessi creare 100 B4XFloatTextField1 anziché 5...!
Inoltre li crea a runtime, a differenza di pnAppoggio creato nel Designer, quindi impiegando tempo che, se fosse importante...!
 
Top