Italian Recuperare valore da una label di CustomListView

Pesciolina

Active Member
Licensed User
Longtime User
Buon giorno a tutti,

sono ai primi passi con la CustomListView e grazie a "Sagenut" sono riuscito a capire il funzionamento.
Ora ho inserito la possibilità di cancellare una riga utilizzando CLVSwipe, al momento della cancellazione
ho la necessità di recuperare il valore della label lblNumero, come devo fare ?
B4X:
Public Sub CreateItem (Numero As Int, Penalita As Int, TestoPen As String)
    Dim p As B4XView = xui.CreatePanel("")        'Crea il pannello su cui caricare il layout per l'item da aggiungere alla CLV
    p.SetLayoutAnimated(0, 0, 0, clvListaPen.AsView.Width, 60dip)    'Imposta le dimensioni del pannello. 60Dip è l'altezza del layout dell'item nel Designer
    p.LoadLayout("item")        'Carica il layout dell'item
    LblNumero.SetColorAndBorder(xui.Color_Black     , 2dip , xui.Color_Yellow , 100dip)    'Imposta i colori e i bordi della EditText dell'item
    lblPenalita.SetColorAndBorder(xui.Color_White, 2dip, xui.Color_Black,50dip )
    LblNumero.TextColor = xui.Color_Yellow
    LblNumero.Text = Numero
    lblPenalita.Text = Penalita
    lblTestoPen.Text =  TestoPen    'Scrive il crono ricevuto nella Label dell'item
    
    clvListaPen.Add(p, Swipe.CreateItemValue("", Array("Delete")) )        'Aggiunge l'item alla CLV
        
End Sub

Sub Swipe_ActionClicked (Index As Int, ActionText As String)
    Log($"Action clicked: ${Index}, ${ActionText}"$)
    If ActionText = "Delete" Then
        Dim p As B4XView = clvListaPen.GetPanel(Index)
        Dim lbl As B4XView = p.GetView(0)
    
        clvListaPen.RemoveAt(Index)
    End If
End Sub

1707123192053.png


Grazie
Marco
 

Sagenut

Expert
Licensed User
Longtime User
Eri ad un passo dal finire da solo. :)
B4X:
Sub Swipe_ActionClicked (Index As Int, ActionText As String)
    Log($"Action clicked: ${Index}, ${ActionText}"$)
    If ActionText = "Delete" Then
        Dim p As B4XView = clvListaPen.GetPanel(Index)
        Dim lbl As B4XView = p.GetView(0)
 
        clvListaPen.RemoveAt(Index)
    End If
End Sub
lbl sarà il tuo temporaneo riferimento a LblNumero.
Quindi ti basta usare
B4X:
lbl.Text
per ottenere il suo contenuto e farne ciò che ti serve prima del comando di rimozione dell'Item.
 

Pesciolina

Active Member
Licensed User
Longtime User
mi sono accorto ora che l'indice 0 è la label più a DX e non la prima di SX, sono un p.

Grazie
 

Sagenut

Expert
Licensed User
Longtime User
Bene se hai risolto.
Non potendo vedere il tuo Tree View ho pensato che fossero in fila da sinistra verso destra.
 

Pesciolina

Active Member
Licensed User
Longtime User
sono in fila da SX ad DX, è corretto che il valore 0 dell'indice corrisponda alla label di DX lblTestoPen ?
1707138845843.png
 

Sagenut

Expert
Licensed User
Longtime User
Per sapere l'indice delle tue View devi guardare il Views Tree nel Designer aprendo il layout che ti serve.
ordine.jpg

Da lì potrai vedere in che ordine hai aggiunto le View e quindi sapere il loro indice.
Tu le puoi aggiungere in ordine, ma poi le puoi spostare dove vuoi nel layout.
Quindi devi sempre fare riferimento all'ordine della Views Tree.
 

Sagenut

Expert
Licensed User
Longtime User
In caso di views contenute dentro un Panel nel Layout dovrai anche fare un ulteriore ragionamento.
Le Views contenute nel Panel ripartiranno da 0 perchè Figlie del Panel.
Quindi dovrai ottenere prima il Panel e poi la View che ti interessa
ordine2.jpg

Per ottenere la Label5 quindi dovrai fare così
B4X:
Dim p As B4XView = clvListaPen.GetPanel(Index)
Dim lbl As B4XView = p.GetView(3).GetView(1)
Il primo GetView(3) farà riferimento al Panel che come vedi ha indice 3 (in rosso).
Con il secondo GetView(1) indicherai la Label5, che ha indice 1 (in giallo) dentro al Panel.
Sembra complicato ma basta capire il concetto e non è difficile.
 
Top