Italian Problemi conversione da Activity a B4XPages

SimonAndroid

Active Member
Licensed User
Longtime User
Salve, ci risiamo ho provato a convertire un piccolo esempio con le B4XPages sperando di riuscirci ma continuava a darmi errori strani che preferisco allegare il file. L'esempio è una variante, estratto dal CardList che è un po' datato ma funziona bene allego link originale Card List. Spero che qualcuno possa darci un occhio e allegare il progetto convertito, mi serve sempre da studio, in realtà vorrei provare a inserirlo in un drawer, creando un menu con immagini e testo. Esempio il comando Activity.AddMenuItem3 non esiste su B4XPages come si sostitisce..
AddMenuItem3:
    Activity.AddMenuItem3("", "refresh", xui.LoadBitmapResize(File.DirAssets, "ic_cached_white_24dp.png", 32dip, 32dip, True), True)
    Activity.AddMenuItem3("", "done", xui.LoadBitmapResize(File.DirAssets, "ic_done_white_24dp.png", 32dip, 32dip, True), True)

questo invece è il pezzo più importante da convertire...
Activity:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("1")
    Activity.AddMenuItem3("", "refresh", xui.LoadBitmapResize(File.DirAssets, "ic_cached_white_24dp.png", 32dip, 32dip, True), True)
    Activity.AddMenuItem3("", "done", xui.LoadBitmapResize(File.DirAssets, "ic_done_white_24dp.png", 32dip, 32dip, True), True)
    Dim bitmaps As List = Array("pexels-photo-446811.jpeg", "pexels-photo-571195.jpeg", "pexels-photo-736212.jpeg", "pexels-photo-592798.jpeg")
    For i = 1 To 15
        CLV1.Add(CreateItem(CLV1.AsView.Width, $"Item #${i}"$, bitmaps.Get(Rnd(1,5)-1)), "")
    Next
End Sub

Private Sub CreateItem(Width As Int, Title As String, Image As String) As Panel
    Dim p As B4XView = xui.CreatePanel("")
    Dim height As Int = 90dip
    If GetDeviceLayoutValues.ApproximateScreenSize < 4.5 Then height = 310dip
    p.SetLayoutAnimated(0, 0, 0, Width, height)
    p.LoadLayout("Card1")
    lblTitle.Text = Title
    ImageView1.SetBitmap(xui.LoadBitmapResize(File.DirAssets, Image, ImageView1.Width, ImageView1.Height, True))
    Return p
End Sub
 

Attachments

  • CardList.zip
    113.9 KB · Views: 146

LucaMs

Expert
Licensed User
Longtime User
Salve, ci risiamo ho provato a convertire un piccolo esempio con le B4XPages sperando di riuscirci ma continuava a darmi errori strani che preferisco allegare il file.
Avresti dovuto allegare la prova che hai fatto, ovvero il progetto B4XPages, altrimenti come scopriamo dove sia il tuo errore?

L'unica cosa che non funzionerà in un progetto B4XPages, di ciò che hai allegato, è il GetDeviceLayoutValues.ApproximateScreenSize, che serve al progetto per valutare se l'app sia stata installata su un dispositivo con display di dimensioni inferiori ai 4,5" (ovvero tentativo di sapere se sia uno smartphone o un tablet), valutazione che sarebbe stato meglio fare nella routine-evento B4XPageCreated, anziché in quella che crea l'item della xCLV, perché è inutile eseguirla ogni volta (15 volte, nel progetto).

Non funzionerà nel senso che è certamente un metodo B4A, quindi se vuoi creare anche le versioni B4i e B4J dovrai trovare un'alternativa (che in B4J non serve, in quanto sai già quali saranno le dimensioni del Form, mentre in B4i... non ho B4i quindi non lo so ma sarà semplice).

Benché non mi sembra che possa aiutarti molto, allego la versione B4XPages, per ora senza il menu. Ho cercato e trovato:
https://www.b4x.com/android/forum/threads/b4x-b4xpages-main-menu.118956/post-744088
nel quale Erel dice:
The next version of B4XPages will support menus.
Allora sono andato a cercare nel "B4A Change log (version history)" ma l'unica cosa che ho trovato è stata:
New "contribute" menu item.
senza spiegazioni.

Cercherò ancora.


P.S. Cercato ancora (velocemente) e trovato questo, in cui c'è anche il contributo un certo Luca che non conosco, il quale riporta una risposta di Erel - da leggere.
[Quel Luca risolse anche quel problema 😁 - quanto pare, perché io non lo ricordo; ma io che c'entro?!]

Ho anche visto che c'è un AddMenuItem anche in B4XPages (non mi è mai piaciuto quel tipo di menu per cui non lo avevo certo cercato per le B4XPages) ma che non consente inserimento di immagini; si potranno usare, probabilmente, FontAwesome e/o Material icons.
 

Attachments

  • xCardList.zip
    223.6 KB · Views: 156
Last edited:

SimonAndroid

Active Member
Licensed User
Longtime User
Ringraziandoti per l'ennesimo aiuto @LucaMs , credo che guardando il tuo codice ed il mio non trovo la quadra, perciò allego il progetto come da te richiesto..
continua a darmi errori che non riesco a capire... quando seleziono la pagina 2 si verifica questo (vedi immagine)... tutto è molto sperimentale perciò prendilo solo come esempio.. sto cercando di utilizzare B4XPages al posto delle Acytivity però la strada sembra un po' in salita mi esalto e mi rifermo per problemi che francamente per la mia mente umana non sono comprensibili, analizzo il codice tuo ed il mio e mi sembrano identici però a me dice (variabile 'CLV1' non inizializzata warning #11) ma è scritta pedissequamente cosa sbaglio a parte cambiare mestiere! 🤬 😭😡
 

Attachments

  • B4XTableAndTwoDrawers2.zip
    264 KB · Views: 153
  • Immagine 2021-08-13 132734.jpg
    Immagine 2021-08-13 132734.jpg
    135.4 KB · Views: 152

LucaMs

Expert
Licensed User
Longtime User
Per ora l'ho soltanto aperto e già vedo:

1628855820494.png


Oh, comunque con i Drawer ho combattutto una sola volta - nemmeno per me stesso - e non è improbable che sia arduo, quindi non pensare che il problema sia la tua "mente umana" :)
 

SimonAndroid

Active Member
Licensed User
Longtime User
infatti perché nel tuo progetto questa warning non appare 'Variabile 'CLV1' was not initizlized (warning #11)' considerando che è stato scritto come l'hai scritto te?
 

LucaMs

Expert
Licensed User
Longtime User
infatti perché nel tuo progetto questa warning non appare 'Variabile 'CLV1' was not initizlized (warning #11)' considerando che è stato scritto come l'hai scritto te?
Beh nel mio progetto non ci sono drawer, non è selezionata la libreria B4XDrawer né c'è quella classe mdlDrawer (devo cercare; ho trovato un thread in cui ho pure discusso ma non ricordo... purtroppo. Il problema era riuscire ad avere il drawer solo su una pagina, credo).

La CVL1 probabilmente la carichi in quel drawer, che già non è "accettato" (meglio dire "riconosciuto", probabilmente) e di conseguenza la CLV1.
 

LucaMs

Expert
Licensed User
Longtime User
Allora, i due warning:

modDrawer è una variabile oggetto del tipo di quella classe, mdlDrawer e, se cerchi nel progetto (CTRL+F modDrawer) vedrai che non viene inizializzata in alcun punto (non c'è mdlDrawer.Initialize).

la CLV1, è dichiarata nella B4XMainPage, nella quale tu carichi il layout "MainPage" che non contiene una xCustomListView di nome CLV1 (né altre).
 

LucaMs

Expert
Licensed User
Longtime User
Mi fermo qui perché penso che tu abbia preso un progetto "non perfetto", con quella classe del tutto personale mdlDrawer, che non c'entra direttamente con B4XDrawer.
Nel thread dal quale lo hai preso ci sono esempi migliori realizzati da @klaus.
 

SimonAndroid

Active Member
Licensed User
Longtime User
Riguardando meglio ho visto l'errore, non mi sono accorto che mancava CLV1 nel form ero talmente convinto che il problema fosse da un'altra parte che ho ignorato la cosa più banale.. Se hai visto degli esempi un po' articolati con il B4XDrawer, potresti indicarmi qualche link interessante onde evitare di navigare a vista senza senso.. Comunque grazie ancora per prezioso contributo.. @LucaMs :)
 

LucaMs

Expert
Licensed User
Longtime User
Riguardando meglio ho visto l'errore, non mi sono accorto che mancava CLV1 nel form ero talmente convinto che il problema fosse da un'altra parte che ho ignorato la cosa più banale.. Se hai visto degli esempi un po' articolati con il B4XDrawer, potresti indicarmi qualche link interessante onde evitare di navigare a vista senza senso.. Comunque grazie ancora per prezioso contributo.. @LucaMs :)
Dipende da cosa vuoi ottenere. Ho visto in quel thread che si voleva avere differenti drawer su pagine differenti e un progetto di @klaus, di cui mi fido :), il quale però afferma di avere avuto problemi con la versione B4i (e io non posso certo correggerli, non ho B4i).

Se è solo per studio, come immagino, dovresti comunque decidere come deve essere. La cosa migliore, come sempre, è seguire i tutorial ed i progetti d'esempio di Erel.
 

LucaMs

Expert
Licensed User
Longtime User
Il principale tutorial, di Erel ovviamente, su B4XDrawer con B4XPages:
https://www.b4x.com/android/forum/threads/b4x-b4xpages-b4xdrawer.120246/post-751822

In quel caso il drawer è implementato in una sola delle B4XPages. La cosa più semplice, se vuoi che sia anche su altre pagine, è ovviamente copiare il tutto su ogni pagina.
Per fare in modo che lo stesso drawer sia invece visualizzato a prescindere dalla B4XPage attualmente visibile, la cosa è più complicata (non so se sul sito ci sia un esempio anche per questo).
 

SimonAndroid

Active Member
Licensed User
Longtime User
avere avuto problemi con la versione B4i (e io non posso certo correggerli, non ho B4i).
...non è un problema B4i non lo sto utilizzando per ora.. (anche se l'ho acquistato) prova a mandarmi il link che intendi provo a darci un'occhiata..
il mio scopo è realizzare un drawer dove ogni scelta ha un titolo, un testo sotto e un'immagine, quello che hai sistemato con xCards andrebbe inserito in un drawer tutto qui.. non credo di essere lontano dalla soluzione però sto ancora sudando ..🥵..
 

LucaMs

Expert
Licensed User
Longtime User
...non è un problema B4i non lo sto utilizzando per ora.. (anche se l'ho acquistato) prova a mandarmi il link che intendi provo a darci un'occhiata..
il mio scopo è realizzare un drawer dove ogni scelta ha un titolo, un testo sotto e un'immagine, quello che hai sistemato con xCards andrebbe inserito in un drawer tutto qui.. non credo di essere lontano dalla soluzione però sto ancora sudando ..🥵..
Sì ma dev'essere visibile in "tutta l'app", ovvero qualunque pagine tu apra?

[sto sudando anch'io, ma non è colpa della programmazione 😁 ]
 

SimonAndroid

Active Member
Licensed User
Longtime User
si certo, però incollarlo in tutte le pagine se non trovo di meglio non è un problema.. l'esempio di @Erel è troppo sempliciotto io vorrei avere una cosa più dinamica dove il numero delle voci non è vincolato al layout ma deve scorrere come 'abbiamo' (cioè hai fatto su xCards) solo che con quella soluzione applicata al DRAWER mi si apre un mondo, in quanto posso realizzare tutti i menu che voglio e parametrizzarli lavorando di fantasia immagini, testi, bottoni, ..ecc.. senza essere vincolato ad uno spazio predefinito (vedi esempio @Erel).
 

SimonAndroid

Active Member
Licensed User
Longtime User
E' proprio il link da cui sono partito io..
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
si certo, però incollarlo in tutte le pagine se non trovo di meglio non è un problema.. l'esempio di @Erel è troppo sempliciotto io vorrei avere una cosa più dinamica dove il numero delle voci non è vincolato al layout ma deve scorrere come 'abbiamo' (cioè hai fatto su xCards) solo che con quella soluzione applicata al DRAWER mi si apre un mondo, in quanto posso realizzare tutti i menu che voglio e parametrizzarli lavorando di fantasia immagini, testi, bottoni, ..ecc.. senza essere vincolato ad uno spazio predefinito (vedi esempio @Erel).
Devo ancora impiccarmici per farlo funzionare in B4J - per non parlare di B4i - ma... hai visto questo (non c'entra molto, non ho usato B4XDrawer, sono solo vanitoso 😂)?
 
Top