Italian Errore nell'evento checkbox_CheckedChange di una CustomListView

Sabotto

Active Member
Licensed User
Ho una CLV composta da pannelli aventi una Label e una CheckBox
Al click sulla CheckBox volgio cambiare colore alla label in base alla spunta o meno, e fin qui tutto ok.
Se però aggiungo un item già "spuntato", l'evento CheckedChange mi dà errore (credo del Sender)


B4X:
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout1")

    'Crea una lista
    For i = 0 To 10
        clvSoci.Add(CreaRigaCLVSoci("Nome-" & i,False), "")
    Next
        
End Sub

Sub CreaRigaCLVSoci(nome As String, checked As Boolean) As Panel

    Dim pnl As B4XView = xui.CreatePanel("")
    pnl.SetLayoutAnimated(0, 0, 0, clvSoci.AsView.Width, 50dip)
    pnl.LoadLayout("layPartecipante")
    lblNome.Text = nome
    ChkNome.Checked=checked
    Return pnl

End Sub

Sub chkNome_CheckedChange(Checked As Boolean)
    
    Dim index As Int = clvSoci.GetItemFromView(Sender) <===    'qui da errore di oggetto non inizializzato quando eseguo 'btnAggiungi'
    
    Dim pnl As B4XView = clvSoci.GetPanel(index)
    Dim lbl As B4XView = pnl.GetView(0)
    clvSoci.AsView.BringToFront
    
    If Checked Then   
        lbl.TextColor=Colors.RGB(70,134,208)
    Else
        lbl.TextColor=Colors.RGB(0,0,0)
    End If   
End Sub


Sub btnAggiungi_Click
    
    clvSoci.Add(CreaRigaCLVSoci("Nome Aggiunto",True), "")
    
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
La riga dev'essere:

Sub CreaRigaCLVSoci(nome As String, checked As Boolean) As B4XView

e dichiara ChkNome As B4XView
 

Sabotto

Active Member
Licensed User
La riga dev'essere:

Sub CreaRigaCLVSoci(nome As String, checked As Boolean) As B4XView

e dichiara ChkNome As B4XView
Niente da fare , l'errore persiste anche cone le modifiche che mi suggerisci. Ti allego il brevissimo progettino per il test che dà errore.
Se hai tempo magari gli dai uno sguardo. Grazie!
 

Attachments

  • Test Modificato.zip
    12.5 KB · Views: 110

LucaMs

Expert
Licensed User
Longtime User
L'errore sta nel fatto che nella routine per aggiungere un nuovo item tu imposti anche il valore della CheckBox. Questo scatena l'evento CheckedChanged PRIMA che il Panel (B4XView!) sia stato aggiunto alla xCLV.

Corretto.
 

Attachments

  • Test3.zip
    12.8 KB · Views: 124

Sabotto

Active Member
Licensed User
Perfetto Luca, con la tua correzione funziona. Ma mi chiedo: perche l'errore non si scatenava se usavo lo stesso sistema in fase di caricamento delle voci (nella create per intenderci)
B4X:
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout1")

    'Crea una lista
    For i = 0 To 10
        If i= 7 Then
            'solo l'item 7 lo creo gia "checked"'
            'qui non scatena l'errore eppure è la stessa chiamata
            clvSoci.Add(CreaRigaCLVSoci("Nome-" & i,True), "")
       
        Else
            clvSoci.Add(CreaRigaCLVSoci("Nome-" & i,False), "")
        End If
       
    Next
       
End Sub
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Bella domanda!

Appena mi passerà il mal di testa (se passerà, 'ccisua) proverò a guardare di nuovo il tutto e risponderti.


[Se non sbaglio, per qualche strano motivo non mi vengono segnalati i tuoi nuovi post qui]
 

LucaMs

Expert
Licensed User
Longtime User
Perfetto Luca, con la tua correzione funziona. Ma mi chiedo: perche l'errore non si scatenava se usavo lo stesso sistema in fase di caricamento delle voci (nella create per intenderci)
Veramente anche nella versione funzionante che ho allegato gli 11 elementi vengono caricati nella Create.


P.S. Già, ma con la mia modifica; provo a "tornare" indietro...


Beh, tempo perso. Probabilmente nella Create gli eventi delle view come la CheckBox non vengono ancora scatenati.
 
Top