Italian Switch button

Vasmar

Member
Licensed User
Buongiorno,
Ancora grazie a Sagenut per la mirabile soluzione sullo scroll e intercettazione click.
Nel "tradurla" nel mio caso specifico ho anche creato un terzo layout di riga e ci ho infilato un radiobutton. Funziona e la costruzione della pagina va a buon fine e scorre ("scrolla"), a parte il fatto che se clicco sopra il bottone si accende, ma poi non si spenge più. Poi però ho sostituito il radiobutton con un B4XSwitch, e l'app va in crash al momento del loadlayout della riga in questione, nel modulo dove si costruisce la pagina. Sia lì che nel modulo della riga, il bottone è definito B4XView e sono selezionate anche le librerie Xui, Xui View e xCustomListViews.
Un'altra stranezza è che se metto prima il SetLayoutAnimated e poi il LoadLayout (come ho visto nell'esempio di Sagenut), va in crash sul SetLayoutAnimated. Le altre due righe hanno il SetLayoutAnimated DOPO il LoadLayout, ma il programma non fa una piega, ovvero con il radiobutton costruisce la pagina.
Che vorrà mai?
:) Grazie.

PS: il codice è questo, va in crash sul loadlayout

Private Sub CreaRigaRip(NRiga As Int, Colo As Int, Descrizione As String)
Dim p As B4XView = xui.CreatePanel("")
p.LoadLayout("RigaRip")
LbDeRip.SetLayoutAnimated(0, 0, 0, LbDeRip.Width, Altriga)
 

Sagenut

Expert
Licensed User
Longtime User
Un RadioButton è normale che non si spenga più.
Generalmente vanno usati in gruppi perchè servono a permettere una sola selezione tra più opzioni.
Forse a te serve una CheckBox, dove la spunta la metti e la togli.
Come sempre............... OK descrivere il problema, ma senza avere un progettino che mostri lo stesso problema (se non è possibile allegare il progetto vero e proprio per altri motivi) rende tutto molto complesso perchè si deve INTUIRE cosa stà accadendo.
Detto questo.... Tu crei un Panel e ci carichi un Layout
B4X:
Dim p As B4XView = xui.CreatePanel("")
p.LoadLayout("RigaRip")
già potresti avere problemi perchè il panel ancora non ha una dimensione e quindi il layout se dovesse adattarsi non avrebbe riferimenti.
Ma poi
B4X:
LbDeRip.SetLayoutAnimated(0, 0, 0, LbDeRip.Width, Altriga)
fai un SetLayout su un qualcosa che non è il Panel appena creato.
Da quì la difficoltà a capire che stai facendo e come. :)
 

LucaMs

Expert
Licensed User
Longtime User
Buongiorno,
Ancora grazie a Sagenut per la mirabile soluzione sullo scroll e intercettazione click.
Nel "tradurla" nel mio caso specifico ho anche creato un terzo layout di riga e ci ho infilato un radiobutton. Funziona e la costruzione della pagina va a buon fine e scorre ("scrolla"), a parte il fatto che se clicco sopra il bottone si accende, ma poi non si spenge più. Poi però ho sostituito il radiobutton con un B4XSwitch, e l'app va in crash al momento del loadlayout della riga in questione, nel modulo dove si costruisce la pagina. Sia lì che nel modulo della riga, il bottone è definito B4XView e sono selezionate anche le librerie Xui, Xui View e xCustomListViews.
Un'altra stranezza è che se metto prima il SetLayoutAnimated e poi il LoadLayout (come ho visto nell'esempio di Sagenut), va in crash sul SetLayoutAnimated. Le altre due righe hanno il SetLayoutAnimated DOPO il LoadLayout, ma il programma non fa una piega, ovvero con il radiobutton costruisce la pagina.
Che vorrà mai?
:) Grazie.

PS: il codice è questo, va in crash sul loadlayout

Private Sub CreaRigaRip(NRiga As Int, Colo As Int, Descrizione As String)
Dim p As B4XView = xui.CreatePanel("")
p.LoadLayout("RigaRip")
LbDeRip.SetLayoutAnimated(0, 0, 0, LbDeRip.Width, Altriga)
1. Se pubblichi (alleghi) il file di layout, ci si capisce meglio e si fa prima
2. Esegui sempre in modalità debug e pubblica il messaggio d'errore
3. E questo mi piacerebbe che lo facessero... tutti gli italiani, non solo i membri di B4X:
chiamassero solo questi "bottoni":
1756046531386.jpeg


Gli "altri", tasti/interruttori/pulsanti/deviatori/commutatori o cazzabbubboli 🤣
 

Sagenut

Expert
Licensed User
Longtime User
sono selezionate anche le librerie Xui, Xui View e xCustomListViews.
Se selezioni la libreria XUI Views puoi evitare di selezionare anche la libreria XCustomListView, perchè è già compresa all'interno di XUI Views.
E tu dirai
"E allora perchè non viene rimossa?"
Per non rompere la compatibilità con le vecchie app che utilizzavano quella quando le XUI Views non esistevano.
 

Vasmar

Member
Licensed User
Ok, faccio chiarezza, almeno ci provo.
Il problema è nel modulo Parm, dove si costruisce la pagina con tre righe (Lauoyt) diverse
Allego
 

Attachments

  • Calcola - Copia.rar
    175.2 KB · Views: 21

Vasmar

Member
Licensed User
1. Se pubblichi (alleghi) il file di layout, ci si capisce meglio e si fa prima
2. Esegui sempre in modalità debug e pubblica il messaggio d'errore
3. E questo mi piacerebbe che lo facessero... tutti gli italiani, non solo i membri di B4X:
chiamassero solo questi "bottoni":
.... [omissis]

Gli "altri", tasti/interruttori/pulsanti/deviatori/commutatori o cazzabbubboli 🤣
Hai ragione, la proprietà di linguaggio è più importante di quello che sembra a prima vista, dietro alle parole giuste ci sono idee chiare, dietro a parole imprecise o sbagliate ci sono idee imprecise o sbagliate. Non sempre, ma spesso.
Li chiamerò Button, ok?
 

Sagenut

Expert
Licensed User
Longtime User
Adesso ti faccio arrabbiare con una cosa che fà arrabbiare anche me e che avevo richiesto come Wish.
Per esportare correttamente un progetto B4XPages devi usare questa riga di codice
B4X:
'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=%PROJECT_NAME%.zip
che nel tuo progetto forse hai cancellato per errore.
Aggiungila nella parte alta della B4XMainPage e poi fai CTRL + CLICK come ti indica.
E poi allega il file che ti crea.
 

LucaMs

Expert
Licensed User
Longtime User
Adesso ti faccio arrabbiare con una cosa che fà arrabbiare anche me e che avevo richiesto come Wish.
Per esportare correttamente un progetto B4XPages devi usare questa riga di codice
B4X:
'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=%PROJECT_NAME%.zip
che nel tuo progetto forse hai cancellato per errore.
Aggiungila nella parte alta della B4XMainPage e poi fai CTRL + CLICK come ti indica.
E poi allega il file che ti crea.
Quella non era una cosa facile da "scoprire" e sarebbe meglio che facesse parte dell'IDE.
 

Sagenut

Expert
Licensed User
Longtime User
Nel frattempo lo provo comunque commentando la riga che dovrebbe aggiungere i files esterni che magari non ci sono e non servono.
 

Sagenut

Expert
Licensed User
Longtime User
🤔 Non capisco... dove devo fare Ctrl + click?
Esattamente su quella riga di codice che ti ho postato e che devi riaggiungere al progetto nella B4XMainPage.
Che di base c'è nei progetti B4XPages.
Ma nel tuo vedo che manca, forse l'hai cancellata senza volerlo.
 

Sagenut

Expert
Licensed User
Longtime User
Intanto ti spiego il problema di quella riga.
Tu hai
B4X:
Dim p As B4XView = xui.CreatePanel("")
p.SetLayoutAnimated(0, 0, 0, LbDeRip.Width, Altriga)
p.LoadLayout("RigaRip")
Crei il Panel e poi cerchi di dargli come larghezza quella di una Label....... che però non hai ancora caricato (essendo in quel layout che carichi dopo) quindi non esiste come riferimento.
Non ho esaminato tutto il progetto perchè poi vengono fuori altri errori, ma se lo aggiungi come elemento della CLV suppongo che ti possa andare bene di utilizzare tutta la larghezza della CLV.
Prova così
B4X:
p.SetLayoutAnimated(0, 0, 0, ClvElenco.AsView.Width, Altriga)
 

Vasmar

Member
Licensed User
Esattamente su quella riga di codice che ti ho postato e che devi riaggiungere al progetto nella B4XMainPage.
Che di base c'è nei progetti B4XPages.
Ma nel tuo vedo che manca, forse l'hai cancellata senza volerlo.
Questo proprio non lo sapevo... comunque mi dà un exit code: 2 e non lo fa



Crei il Panel e poi cerchi di dargli come larghezza quella di una Label....... che però non hai ancora caricato (essendo in quel layout che carichi dopo) quindi non esiste come riferimento.
ok, è chiaro, ma perché con lo stesso comportamento errato in CreaRigaSpi non si arrabbia?

Ho provato a mettere
p.SetLayoutAnimated(0, 0, 0, ClvElenco.AsView.Width, Altriga)
e anche
p.SetLayoutAnimated(0, 0, 0, 300dip, Altriga)
ma sempre lì si ferma
 
Last edited:

Sagenut

Expert
Licensed User
Longtime User
ok, è chiaro, ma perché con lo stesso comportamento errato in CreaRigaSpi non si arrabbia?
A me dava errore anche lì, ma non sempre.
Infatti ho fatto la stessa correzione lì.
Il secondo errore è che hai dichiarato lo SWITCH come B4XView, mentre è una CustomView e ha la sua definizione.
Per generare i membri delle View non devi fare a mano (nel caso sia quello che hai fatto) ma usa sempre il Designer
gener.jpg

che sà benissimo cosa fare. :)
 

Sagenut

Expert
Licensed User
Longtime User
Mi pare che avevi anche modificato l'Initialize della Page Parm
B4X:
Public Sub Initialize As Object
'    Root = xui.CreatePanel("RigaClick")
'    Return Null
    Return Me
End Sub
Ho commentato quelle due righe e ho messo il Return Me che c'è in origine perchè deve ritornare il riferimento dell'oggetto (Classe) Page.
 

Sagenut

Expert
Licensed User
Longtime User
Prova se funziona
 

Attachments

  • Calcola.zip
    185.8 KB · Views: 22

Vasmar

Member
Licensed User
Evviva, così funziona! Grazie 🙏

L'errata definizione del controllo e la modifica dell'Initialize erano rimasugli della miriade di tentativi che ho fatto prima 😞
 

Vasmar

Member
Licensed User
Un'ultima cosa...
nel modulo RigaRip, alla sesta riga: RbRip = Root.GetView(RbRip)
di
Public Sub Initialize
Root = xui.CreatePanel("")
Root.SetLayoutAnimated(0, 0, 0, 300dip, 60dip)
Root.LoadLayout("RigaRip") ' carica il layout della riga
LbDeRip = Root.GetView(LbDeRip)
RbRip = Root.GetView(RbRip)
end sub

l'IDE mi segnala (2 volte) che i tipi non corrispondono, eppure sia nel designer che nella Initialize, RbRip ora è dichiarato B4XSwitch.

Se lo eseguo non va in errore ma costruisce la pagina
 
Top