Italian B4J :diversificare proprietà durante items.add

Discussion in 'Italian Forum' started by MARCO CORRIAS, Jul 14, 2019.

  1. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    Buongiorno a tutti,
    sapete dirmi se riesco a modificare qualche proprietà durante l'inserimento di una riga in una listview ?

    es:
    ListViewOrd.Items.Add(Riga)

    In base alla valore "Riga" vorrei cambiare il colore oppure il font del testo che vado ad inserire .

    Per non sconvolgere il lavoro vorrei evitare questa soluzione

    https://www.b4x.com/android/forum/threads/customized-listview.34951/#content


    Grazie
     
  2. Star-Dust

    Star-Dust Expert Licensed User

    Non é possibile in B4J.
    Usa xCustomListView o altri ListView personalizzabili
     
    sirjo66 and MARCO CORRIAS like this.
  3. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    Grazie mille
     
  4. LucaMs

    LucaMs Expert Licensed User

    Il motivo è che nella ListView tutti gli item hanno lo stesso unico layout.
     
    MARCO CORRIAS likes this.
  5. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    allora per raggiungere quell'obiettivo dovrò convertire il mio codice con questo spunto
    https://www.b4x.com/android/forum/threads/customized-listview.34951/#content

    nella speranza che riesca a sfruttare questi metodi ???

    ListViewOrd.Items.Get(sel)
    ListViewOrd.Items.Clear
    ListViewOrd.Items.Size

    che sfrutto nell'attuale codice !! speriamo bene
     
  6. LucaMs

    LucaMs Expert Licensed User

    Non la conosco ed è vecchiotta; forse ti conviene tentare subito la xCustomListView.
     
  7. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    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

    Code:
    Sub InitView
        
    For n = 0 To 100
            
    Dim p As B4XView = xui.CreatePanel("")
            p.SetLayoutAnimated(
    000, CustomListView1.AsView.Width, 250dip)
            p.LoadLayout(
    "2")
            p.SetLayoutAnimated(
    000, 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
     
  8. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    Sto lavorando su questo, forse risolvo

    Code:
    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(
    000, CustomListView1.AsView.Width, 50dip)
           p.Color = 
    Rnd(0xff000000, -1)
           CustomListView1.Add(p, 
    "")       
       
    Next
    End Sub
     
  9. LucaMs

    LucaMs Expert 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
     
  10. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    Un ultimo aiuto : non riesco a prendere il valore della riga che seleziono :-(
    Code:
    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(
    000, 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 StringAs 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 !!!!
     
  11. LucaMs

    LucaMs Expert Licensed 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.
    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")

    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
     
    MARCO CORRIAS likes this.
  12. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    vero ... ancora non sono riuscito a farlo ... :-D
     
  13. LucaMs

    LucaMs Expert Licensed User

    Allego un esempio (non certo brillante :D), sperando ti possa essere utile.
     

    Attached Files:

    sirjo66 and MARCO CORRIAS like this.
  14. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    GRANDEEEE ....
    faccio subito un test ...

    Grazie mille
     
    LucaMs likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice