Italian [ Risolto] Customview orizzontal JumpToItem

Xfood

Expert
Licensed User
Ciao Ragazzi,
ho un problema che mi sta facendo uscire matto,
ho una Customview orizzondale, che viene popolata con un layout, e vorrei che all'avvio si posizionasse su un item che passo come parametro,
ho provato questo codice:
B4X:
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card1.png","Riccardo","1 Gennaio",570,250),"Banca1")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card2.png","Giuseppe","2 Febbraio",1250,680),"Banca2")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card1.png","Casa","3 Marzo",8450,1000),"Banca3")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card2.png","Daniela","4 Aprile ",6380.50,1420),"Banca4")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card1.png","Personale","3 Maggio",28250,2835),"Banca5")
    
    CustomListView1.ScrollToItem(2)   ' sia solo con questo'
    Sleep(0)
    CustomListView1.JumpToItem(2) ' sia solo con questo, che con entrambi ma nulla'
    Sleep(0)

vorrei che si posizionasse per esempio nel item 2, invece rimane nell'item 1, chiaramente posso scorrere ,
ma come fare a posizionarmi su un item specifico?
1696061844656.png


vorrei posizionarmi sull'item 2
1696061872328.png
 

Xfood

Expert
Licensed User
stavo preparanto un piccolo esempio per inviarlo cosi da poter verificare il problema,
ma l'esempio ha funzionato perfettamente, quindi la soluzione sembra sia questa
B4X:
CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card1.png","Riccardo","1 Gennaio",570,250),"Banca1")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card2.png","Giuseppe","2 Febbraio",1250,680),"Banca2")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card1.png","Casa","3 Marzo",8450,1000),"Banca3")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card2.png","Daniela","4 Aprile ",6380.50,1420),"Banca4")
    CustomListView1.Add(CreateItemHorizontal(CustomListView1.AsView.Width,"card1.png","Personale","3 Maggio",28250,2835),"Banca5")
    Sleep(0)   ' metterere uno sleep(0) qui, penso per far stabilizzare la grafica'
    CustomListView1.JumpToItem(2) ' adesso e' ok
    Sleep(0)
 

Xfood

Expert
Licensed User
Allora bevo anch'io un caffè.

Cmq, quei parametri numerici mi fanno sospettare.

Quanto vuoi che siano larghi gli item? L'altezza suppongo uguale alla CustomListView, anche se non è obbligatorio, ma la larghezza, essendo impostata come orizzontale, è importante.
i parametri numerici erano solamente delle prove , per popolare la label uscite,entrate, comunque allego il codice se puo servire

B4X:
Private Sub CreateItemHorizontal(Width As Int, img As String, Nome As String, Codice As String, Versamento As Double,Prelievo As Double ) As Panel
    Dim xui As XUI
    Dim p   As B4XView  = xui.CreatePanel("")
    p.SetLayoutAnimated(5000,0, 0,Width, 342dip)
    'p.SetLayoutAnimated(5000,0, 0,Width, 380dip)
    p.LoadLayout("cardsList")
    AjustaImageView(ImageView1carda,File.DirAssets, img)
    
    Dim saldo As Double=Versamento-Prelievo
    
    LblTitolare.Text=Nome
'    LblSaldo.Text="€ " & NumberFormat2(saldo,0,2,2,True)
'    LblUscite.Text="€ " & NumberFormat2(Prelievo,0,2,2,True)
'    LblVersamenti.Text="€ " & NumberFormat2(Versamento,0,2,2,True)



    LblSaldo.Text="€ " & NumeroItaliano(saldo,2)
    LblUscite.Text="€ " & NumeroItaliano(Prelievo,2)
    LblVersamenti.Text="€ " & NumeroItaliano(Versamento,2)



                            
    'NumberFormat2(fTotal,0,2,2,True)
    
    'Log(NumberFormat2(-101010101010101500.5553, 1, 2, 2, True))    ' <-- -101,010,101,010,101,504.00
    'Log(NumberFormat2(101010101010101500.5553, 1, 2, 2, True))     ' <--  101,010,101,010,101,504.00
    
    If saldo<500 Then
        
        LblSaldo.TextColor=0xFFFF0505   ' colore rosso
    Else
        LblSaldo.TextColor=0xFF5ECA00   ' colore Verde
    End If
    
    
    

    
    Return p
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Un paio di suggerimenti da puntiglioso (anche se probabilmente il tuo è solo un esempio).

1.
CustomListView1.AsView.Width
1 - Anche se lo fanno in molti e probabilmente una volta compilato i tempi saranno praticamente gli stessi, io preferisco usare una variabile:
B4X:
Dim Width As Double
Width = CustomListView1.AsView.Width
'... Create(Width)


2.
La funzione CreateItemHorizontal è meglio che restituisca una B4XView, in modo tale che se un giorno dovessi riutilizzarla con un altro linguaggio B4X...!
Del resto la creazione del Panel avviene con xui.CreatePanel che appunto crea una B4XView.


3.
Anche se le routine dovrebbero essere il più possibile autonome, come anche quella funzione, non dichiarerei un nuovo oggetto xui al suo interno ma userei la xui già dichiarata a livello di classe nel modello.


4.
Userei una classe o un custom type per passare i valori alla funzione (ed in generale per gestirli nel progetto). Si potrebbe (dovrebbe?) anche assegnare un oggetto di quel tipo all'item (il Value).
 
Last edited:

Xfood

Expert
Licensed User
grazie @LucaMs faccio tesoro delle tue indicazioni / consigli, e modifico subito il progetto,
che spero di finire entro domani sera..
 
Top