Italian B4J :diversificare proprietà durante items.add

Star-Dust

Expert
Licensed User
Longtime User
Non é possibile in B4J.
Usa xCustomListView o altri ListView personalizzabili
 

MARCO C.

Active Member
Licensed User

MARCO C.

Active Member
Licensed User
Non la conosco ed è vecchiotta; forse ti conviene tentare subito la xCustomListView.

Non conoscendo nulla su CustomListView, ho cercato qualcosa sul forum.
Pensavo di imparare qualcosa da questo esempio ( miniproject.zip)

https://www.b4x.com/android/forum/threads/customlistview-b4j.102745/

Ma non riesco a capire come modificare color o font o backcolor ( va bene qualunque cosa purché sia diverso) ...
della label presente nell'esempio

B4X:
Sub InitView
    For n = 0 To 100
        Dim p As B4XView = xui.CreatePanel("")
        p.SetLayoutAnimated(0, 0, 0, CustomListView1.AsView.Width, 250dip)
        p.LoadLayout("2")
        p.SetLayoutAnimated(0, 0, 0, p.Width, 50dip)
        CustomListView1.Add(p,"")
    Next
End Sub

Mi carica il layout 2 .. ma non riesco a puntare alla label presente nel layout .

Se trovi altro nel forum , posso apprendere anche da altro esempio che ritieni più valido/ideone .
Grazie
 

MARCO C.

Active Member
Licensed User
Sto lavorando su questo, forse risolvo

B4X:
Sub Process_Globals
   Private MainForm As Form
   Private xui As XUI
   Private CustomListView1 As CustomListView
   Private ClickIndex As Int
End Sub

Sub AppStart (Form1 As Form, Args() As String)
   MainForm = Form1
   MainForm.RootPane.LoadLayout("1") 'Load the layout file.
   MainForm.Show
   For i = 1 To 100
       Dim p As B4XView = xui.CreatePanel("p")
       p.SetLayoutAnimated(0, 0, 0, CustomListView1.AsView.Width, 50dip)
       p.Color = Rnd(0xff000000, -1)
       CustomListView1.Add(p, "")       
   Next
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Mi carica il layout 2 .. ma non riesco a puntare alla label presente nel layout .
In quel codice, parziale, puoi ottenere una (eventuale, visto che non conosco il layout 2) label (ti conviene dichiararla nella sub Globals):
Label1 = p.GetView(1) ' ammesso che Label1 sia la view numero 2 (partendo da zero) presente nel layout.

Comunque, la cosa migliore è seguire uno dei video tutorial di Erel:
https://www.b4x.com/etp.html?vimeography_gallery=1&vimeography_video=256437236
 

MARCO C.

Active Member
Licensed User
In quel codice, parziale, puoi ottenere una (eventuale, visto che non conosco il layout 2) label (ti conviene dichiararla nella sub Globals):
Label1 = p.GetView(1) ' ammesso che Label1 sia la view numero 2 (partendo da zero) presente nel layout.

Comunque, la cosa migliore è seguire uno dei video tutorial di Erel:
https://www.b4x.com/etp.html?vimeography_gallery=1&vimeography_video=256437236

Un ultimo aiuto : non riesco a prendere il valore della riga che seleziono :-(
B4X:
Sub Process_Globals
   Private MainForm As Form
    Private fx As JFX

   Private CustomListView1 As CustomListView
 
End Sub

Sub AppStart (Form1 As Form, Args() As String)
   MainForm = Form1
   MainForm.RootPane.LoadLayout("1") 'Load the layout file.
   MainForm.Show
  
  
   For i = 1 To 30
  
       Dim lbl As Label
        lbl.Initialize("")
        
       lbl.SetLayoutAnimated(0, 0, 0, CustomListView1.AsView.Width, 30dip)
    
        lbl.Text =" #" & i
        lbl.Alpha=1
        
        If i Mod 2 =0 Then
            lbl.Font = fx.DefaultFont(14)
            CSSUtils.SetBackgroundColor(lbl, fx.Colors.White)
        Else
            lbl.Font = fx.DefaultFont(12)
            CSSUtils.SetBackgroundColor(lbl, fx.Colors.Cyan)
        End If
        
       CustomListView1.Add(lbl ,"" )
   Next
End Sub


'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub CustomListView1_ItemClick (Index As Int, Value As Object)
    Log ("1" & Index & " -" & Value)
    Log ("2" & CustomListView1.GetValue(Index))
    
    
End Sub

index mi risponde ... ma non so come prendere che seleziono !!!!
 

LucaMs

Expert
Licensed User
Longtime User
Mi sa che non hai guardato il video.

Non devi aggiungere una Label ad una CustomListView, ma un Panel (al cui interno puoi inserire tutto ciò che vuoi, meglio caricando un layout creato da Designer).
Quando vai ad aggiungere alla CustomListView il Panel creato, aggiungi anche il valore che ti verrà restituito dall'Item_Click.
CustomListView1.Add(lbl ,"" )
Non va; devi creare un Panel ed aggiungere quello; es.:
Dim pnlItem As Panel
pnlItem.Initialize("Item")
pnlItem.SetLayout(0, 0, CustomListView1.AsView.Width, 50dip)
' Qui potresti caricare un layout: pnlItem.LoadLayout("layItem"), che può contenere quante view vuoi
CustomListView1.Add(pnlItem, "Un valore di qualunque tipo, non per forza stringa come questo")

Sub CustomListView1_ItemClick (Index As Int, Value As Object)
Qui sarà restituito quel Value.

Puoi anche ottenere direttamente delle View che avrai caricato nel pnlItem da Designer (o anche inserite da codice):
pnlItem.LoadLayout("layItem")

Poniamo il caso che layItem contenga una lblNome, creata da Designer, il cui "nome evento" sia lo stesso, lblNome, potrai avere una routine evento normalissima:
Sub lblNome_Click
 
Top