Italian scrollare all'indietro

Vasmar

Active Member
Licensed User
sì, infatti sto pensando di caricare 3 mesi e poi chiedere con un pulsante se si vogliono ulteriori 3 mesi indietro, e così via. Mi sembra di capire che poi, invece, a scrollare in avanti non ci sia problema
 

Sagenut

Expert
Licensed User
Longtime User
Eventualmente, sfruttando il Lazy Loading che è il metodo applicato nel mio esempio, potresti caricare (esempio) 1000 eventi considerando OGGI come giorno centrale (elemento 500).
Avresti così un buffer sia in avanti che indietro.
Finito tale buffer decidere come gestire.
Teoricamente di sarebbe da aggiungere item prima o dopo quando raggiungi l'inizio o la fine.
Non sò, butto idee lì.
 

Vasmar

Active Member
Licensed User
Non è per invidia, ma il calendario di Google, nell'elenco degli impegni in ordine di data "Programma", scrolla che è una bellezza, anche all'indietro liscio come l'olio. Perché il mio no? 🤗
Adesso sto provando a caricare da -1 mese a + 3 mesi. In avanti non ci sono problemi. Indietro quando arriva al confine deve chiedere altri dati cliccando su apposito pulsante, e carico altri 3 mesi indietro, sostituendo la lista attuale, così non ho problemi di inserimenti.
Vedremo se mi soddisfa o no.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
ma in Sql non c'è modo di leggere sequenzialmente (1 per volta) in ordine decrescente? Per la verità andrebbe bene anche in ordine crescente: carico un'altra colonna con valore = 99999999 - data_evento.
SELECT ... FROM ...
WHERE...
ORDER BY CampoData DESC <--- DESCending = ordine inverso, dal maggiore al minore
LIMITI 20 <-- 20 record
OFFSET 10 <-- "salta" 10 record
 

LucaMs

Expert
Licensed User
Longtime User
una agenda/calendario per gestire i propri impegni/appuntamenti/eventi/compleanni.
E non è meglio una view-calendario, potendo evidenziare date "piene" (che contengano impegni/appuntamenti/eventi/compleanni, con colori o icone) e al click sul numero del giorno visualizzi l'elenco di "impegni/etc" per quella data?

https://www.b4x.com/android/forum/threads/b4x-lmb4xdatetemplate.164207/post-1007179

Ad es. a me quello sopra servirà (forse, se mi deciderò a creare quell'app) per evidenziare date per le quali siano state effettuate estrazioni del Lotto (tabella SQLite).
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Domanda idiota: nella tabella del database non hai un campo ID ??

Suggerimento idiota:
se in quel momento sulla CLV hai visualizzato i record (faccio un esempio) dal #1234 al #1253 (quindi 20 record) e voglio tornare indietro di 10 record basta rifare la query con "ID between 1224 and 1243" oppure "ID >= 1234 limit 20" (dipende da che database hai)
 

Vasmar

Active Member
Licensed User
Domanda idiota: nella tabella del database non hai un campo ID ??

Suggerimento idiota:
se in quel momento sulla CLV hai visualizzato i record (faccio un esempio) dal #1234 al #1253 (quindi 20 record) e voglio tornare indietro di 10 record basta rifare la query con "ID between 1224 and 1243" oppure "ID >= 1234 limit 20" (dipende da che database hai)
Sì, andrebbe bene se volessi l'elenco in ordine di ID, cioè di creazione del record, però in una agenda ha più senso avere l'elenco in ordine cronologico. Ma leggere venti record in ordine decrescente non è un problema, il problema, secondo la IA, è che né con Lazy, né con CLV si riesce a inserire righe dietro la prima:

"Lazy accetta l'inserimento di elementi prima del primo?" mia domanda.
"No, anche PreoptimizedCLV non supporta l'inserimento in cima — come avevamo già scoperto cercando la documentazione." sua risposta

E stiamo parlando di una IA a pagamento! Mi sa che dovrò fare questo elenco con il vostro aiuto, ignorando la Infame Adescatrice.
 

LucaMs

Expert
Licensed User
Longtime User
Sì, andrebbe bene se volessi l'elenco in ordine di ID, cioè di creazione del record, però in una agenda ha più senso avere l'elenco in ordine cronologico. Ma leggere venti record in ordine decrescente non è un problema, il problema, secondo la IA, è che né con Lazy, né con CLV si riesce a inserire righe dietro la prima:

"Lazy accetta l'inserimento di elementi prima del primo?" mia domanda.
"No, anche PreoptimizedCLV non supporta l'inserimento in cima — come avevamo già scoperto cercando la documentazione." sua risposta

E stiamo parlando di una IA a pagamento! Mi sa che dovrò fare questo elenco con il vostro aiuto, ignorando la Infame Adescatrice.
Ora non ricordo come lo feci (ovviamente potrei guardare il sorgente, ma non ora), ma se posso spostare in alto un elemento, direi che certamente posso anche crearlo da zero ed inserirlo in cima o dove voglio!
Vedi gif animata:
https://www.b4x.com/android/forum/threads/scrollare-allindietro.171807/post-1050654

[Che le paghi o no, le balle che inventano sono una marea!]
 

LucaMs

Expert
Licensed User
Longtime User
Sì, andrebbe bene se volessi l'elenco in ordine di ID, cioè di creazione del record, però in una agenda ha più senso avere l'elenco in ordine cronologico. Ma leggere venti record in ordine decrescente non è un problema, il problema, secondo la IA, è che né con Lazy, né con CLV si riesce a inserire righe dietro la prima:

"Lazy accetta l'inserimento di elementi prima del primo?" mia domanda.
"No, anche PreoptimizedCLV non supporta l'inserimento in cima — come avevamo già scoperto cercando la documentazione." sua risposta

E stiamo parlando di una IA a pagamento! Mi sa che dovrò fare questo elenco con il vostro aiuto, ignorando la Infame Adescatrice.


java_8MQ5YQ8JC6.gif


B4X:
Private Sub Button1_Click
    Dim Item As B4XView
    Item = CreateCLVItem("Io non posso essere aggiunto qui, in cima!!")
    CLV.InsertAt(0, Item, -1)
End Sub

B4X:
Private Sub CreateCLVItem(Text As String) As B4XView
    Dim pnlItem As B4XView = xui.CreatePanel("")
    pnlItem.SetLayoutAnimated(0, 0, 0, CLV.GetBase.Width, 40dip)
    pnlItem.LoadLayout("layCLVItem")
    'Sets here the properties of the views contained in the layout.
    lblItem.Text = Text
    Return pnlItem
End Sub
 
Last edited:

Vasmar

Active Member
Licensed User
View attachment 172985

B4X:
Private Sub Button1_Click
    Dim Item As B4XView
    Item = CreateCLVItem("Io non posso essere aggiunto qui, in cima!!")
    CLV.InsertAt(0, Item, -1)
End Sub

B4X:
Private Sub CreateCLVItem(Text As String) As B4XView
    Dim pnlItem As B4XView = xui.CreatePanel("")
    pnlItem.SetLayoutAnimated(0, 0, 0, CLV.GetBase.Width, 40dip)
    pnlItem.LoadLayout("layCLVItem")
    'Sets here the properties of the views contained in the layout.
    lblItem.Text = Text
    Return pnlItem
End Sub
Fantastico, grazie.
ora lo "insegno" all' Incapace Assistente 🤗
 

Vasmar

Active Member
Licensed User
Domanda mia:
"secondo te queste istruzioni funzionano?" e ho aggiunto il codice fatto da te:
"Private Sub Button1_Click
Dim Item As B4XView
Item = CreateCLVItem("Io non posso essere aggiunto qui, in cima!!")
CLV.InsertAt(0, Item, -1)
End Sub"
...eccetera...
Lei:
"No, non funzionano. CLV.InsertAt non esiste nella xCustomListView — è proprio quello che abbiamo scoperto all'inizio: la CLV non supporta l'inserimento in cima.
Da dove viene questo codice?"
Io:
"non è vero"
Lei:
"Hai ragione! ...
Mi scuso per aver detto che non esisteva."

Concludendo: una vera faccia di ...bronzo. Come al solito, per fare la domanda giusta devi già sapere la risposta

Ma andiamo avanti.
CLV non supporta migliaia di elementi, ma centinaia?
Potrei usare il metodo del tuo meraviglioso amico, ma come si fa?
Quale è la libreria che risolve tutto assieme a B4XDateTemplate?
Cosa è B4XTemplate?
Molte grazie. 😁
 

Sagenut

Expert
Licensed User
Longtime User
CLV non supporta migliaia di elementi, ma centinaia?
Credo che l'unico limite di una CLV sia la RAM del dispositivo.
Comunque nel guardare qualche appuntamento in agenda non credo che uno passi ore a scrollare, quindi il quantitativo dovrebbe restare nei limiti umani.
 

LucaMs

Expert
Licensed User
Longtime User
Potrei usare il metodo del tuo meraviglioso amico, ma come si fa?
Quale è la libreria che risolve tutto assieme a B4XDateTemplate?
Cosa è B4XTemplate?
  1. C'è la B4XDialog creata da Erel. Come dice il nome, è una dialog cross-platform
  2. Esitono vari template da usare con quella B4XDialog, a seconda del tipo di informazioni vuoi chiedere/mostrare:
    B4XColorTemplate, B4XInputTemplate, B4XListTemplate, etc.
  3. C'è anche B4XDateTemplate, di Erel, che però consente di selezionare un singolo giorno, motivo per cui ho sviluppato il mio lmB4XDateTemplate, multi data, diGiamo. Credo che nel progetto d'esempio ci sia anche un micro-db SQlite.
  4. C'è un "problema": B4XDialog... è una dialog, quindi non puoi metterla in una zona del tuo layout, viene sempre mostrata dentro un suo panel, al centro.
    Pubblicai "qualcosa", non ricordo se aprii un thread o era solo un post, per risolvere questo problema (facilmente) ma per ora non sono riuscito a trovarlo.
    Cercandolo, però, ho trovato questo: https://www.b4x.com/android/forum/threads/b4xtimetemplate.170985/ 😊

P.S. La soluzione per usare B4XDialog come fosse una view, è in quello stesso mio thread: https://www.b4x.com/android/forum/threads/b4x-b4xlib-lmb4xmultidatedlg.164249/
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Potrei usare il metodo del tuo meraviglioso amico, ma come si fa?
Quale è la libreria che risolve tutto assieme a B4XDateTemplate?
Cosa è B4XTemplate?
In pratica avevo già quasi sviluppato ciò che ti serve - novembre 2024 (era solo per testare la mia libreria, non un progetto completo)...

Come dialog - ovvero sopra alle altre view:
java_xaj8MvOUJ6.gif



Fissa la dialog che ora è come una view:
java_KJGUSsskQn.gif
 

Sagenut

Expert
Licensed User
Longtime User
Anche se ti ho detto che non è forse la soluzione migliore, ho voluto provare a fare qualcosa per la tua idea iniziale.
Ovvero quello di leggere nuovi dati all'occorrenza durante lo scroll della lista.
Sia andando avanti che andando indietro, alla faccia della IA.
Il codice è decisamente osceno ma siccome ci ho già investito diverso tempo te lo mando così solo per vedere che in qualche modo è fattibile.

NOTE:
- ho creato un DB al volo con circa 6 mesi prima e dopo la data odierna (ormai qualche giorno è passato).
- il DB contiene un appuntamento ogni giorno, cosa irreale ma così almeno avevo dati da usare.
- Dal LONG ottengo solo la data ma ovviamente si potrebbe ricavare anche l'ora. Che quì sarebbe uguale in ogni giorno.
- il formato del DB contiene la data dei vari giorni in valore LONG. Andrebbe sicuramente corretto per gestire il tempo in UTC e poterlo utilizzare in tutto il mondo.

E' chiaro che quindi serviranno modifiche perchè non avrai sempre un mese pieno da leggere come nel mio caso, a meno che non metti ogni giorno anche con "NESSUN APPUNTAMENTO".
Confido che ti divertirai insieme alle IA o ti metterai a pensare a come correggere. 😅
Potresti dover correggere questa riga
B4X:
#AdditionalJar: sqlite-jdbc-3.53.2.1.jar
con la tua versione di quel JAR.
Io ho scaricato l'ultimo disponibile.
L'esempio è ricco di commenti quindi suppongo che riuscirai a capire la logica (per quanto contorta e totalmente migliorabile).
Basta, mi sono fuso a sufficienza.
Auguri e buon divertimento.
 

Attachments

  • Agenda.zip
    20.1 KB · Views: 51
Top