Italian Errore Initialize su checkBox al caricamento di una CLV

Sabotto

Active Member
Licensed User
Carico un CLV con questo codice
B4X:
Sub RiempieClvImpianti
    For Each oImpianto As Impianto In GL.lstImpianti
        clvImpianti.Add(CreaRigaCLVImpianto(oImpianto.Nome, [B]True[/B], clvImpianti.AsView.Width, 40dip),"")
       ' SE AL POSTO DI [B]TRUE[/B], METTO [B]FALSE[/B], L'ERRORE NELL'EVENTO NON SI VERIFICA
 
    Next
End Sub

Sub CreaRigaCLVImpianto(Text As String, Checked As Boolean,Width As Int, Height As Int) As Panel
 
    'Creo un pannellino per ogni impianto. Il pannellino avrà al suo interno il layout "CellItem"
    'composto da una label per il nome e una check per la selezione dell'item
    Dim p As B4XView = xui.CreatePanel("")
    p.SetLayoutAnimated(0, 0, 0, Width, Height)
    p.LoadLayout("CellItem")
    lblImpianto.Text = Text
    chkImpianto.Checked=Checked
    Return p

End Sub

Sub chkImpianto_CheckedChange(Checked As Boolean)
 
    Dim index As Int = clvImpianti.GetItemFromView(Sender)      ' QUI RICEVO L'ERRORE !!!
    Dim pnl As B4XView = clvImpianti.GetPanel(index)
    Dim lbl As B4XView = pnl.GetView(0)
 
    clvImpianti.AsView.BringToFront
 
    'Ad ogni selezione/deselezione di un impianto, cambia il colore
    '(Se non è selezionato (not checked) lo mette in azzurro altrimenti in nero)
    Dim num As Int
    If Not (Checked) Then num=1
    lbl.TextColor=Colors.RGB(num*70,num*134,num*208)
     
End Sub
Ma ricevo l'errore sulla riga 24 (che ho evidenziato con il commento):

Error occurred on line: 24 (B4XMainPage)
java.lang.RuntimeException: Object should first be initialized (B4XView).
at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:67)
... ecc ecc

Se invece di True, metto False, l'errore non c'è (perchè probabilmente non viene scatenato l'evento). Quindi è come se la checkbox non fosse ancora "pronta", inizializzata durante il caricamento. Come posso ovviare?
 

Sagenut

Expert
Licensed User
Longtime User
Ricevi l'errore perché viene lanciata la
CheckedChange
nel momento che chiami
B4X:
chkImpianto.Checked=Checked
Nella CheckedChange tenti di richiamare il pannello dell' item della CLV, che però ancora non esiste perché non è stato eseguito il
B4X:
Return p
Credo sia così.
Proverei ad impostare il Checked dopo aver popolato la CLV.
Puoi farlo subito dopo il CLV.Add se vuoi impostare gli elementi a mano a mano che vengono creati.
 
Last edited:

Sabotto

Active Member
Licensed User
Giusto, Sagenut.
Ho risolto usando l'evento click, visto che alla fine mi serve solo per cambiare colore all'item selezionato
B4X:
Sub chkImpianto_Click
 
Top