Private Sub clvUsrLst_VisibleRangeChanged(FirstIndex As Int, LastIndex As Int)
Dim ExtraSize As Int = 25 ' Estensione del range visibile
' Inizializza la lista Layouts solo una volta
If Layouts.IsInitialized = False Then Layouts.Initialize
helper.LoadExtendedComboBox(cmbCompany, "tbl_company", "CompanyName",lstcompany)
helper.LoadExtendedComboBox(cmbWorkerty, "tbl_worker_types", "WorkerTypeName",lstWorkerty)
helper.LoadExtendedComboBox(cmbLocation, "tbl_location", "LocationName",lstLocation)
helper.LoadExtendedComboBox(cmbDepartement, "tbl_department", "DepartmentName", lstDepartement)
' Scorri gli elementi entro il range visibile + margine
For i = Max(0, FirstIndex - ExtraSize) To Min(LastIndex + ExtraSize, clvUsrLst.Size - 1)
'Dim Pnl As B4XView = clvUsrLst.GetPanel(i) ' Pannello corrente
Panel1 = clvUsrLst.GetPanel(i) ' Pannello corrente
Dim tdettagli As usrDetails = clvUsrLst.GetValue(i) ' Dati dell'elemento corrente
If i >= FirstIndex - ExtraSize And i <= LastIndex + ExtraSize Then ' Elemento visibile
If Panel1.NumberOfViews = 0 Then ' Carica solo se non già visibile
Dim content As B4XView
If Layouts.Size > 0 Then
' Riutilizza un layout esistente
content = Layouts.Get(0)
Layouts.RemoveAt(0)
Else
' Crea un nuovo layout se nessuno è disponibile
content = xui.CreatePanel("")
End If
Panel1.AddView(content, 0, 0, Panel1.Width, Panel1.Height)
Panel1.LoadLayout("clv_SingleUser") ' Carica il layout
' Popola i campi
edtname.Text = tdettagli.usrName
edtSurname.Text = tdettagli.usrSurname
edtBadge.Text = tdettagli.badge
edtJDE.Text = tdettagli.usrJDE
If cmbCompany.Size = 0 Then cmbCompany.SetItems(lstcompany)
If cmbDepartement.Size = 0 Then cmbDepartement.SetItems(lstDepartement)
If cmbLocation.Size = 0 Then cmbLocation.SetItems(lstLocation)
If cmbWorkerty.Size = 0 Then cmbWorkerty.SetItems(lstWorkerty)
' Seleziona gli indici corretti
cmbCompany.SelectedIndex = lstcompany.IndexOf(tdettagli.usrCompany)
cmbDepartement.SelectedIndex = lstDepartement.IndexOf(tdettagli.usrDepartment)
cmbLocation.SelectedIndex = lstLocation.IndexOf(tdettagli.usrLocation)
cmbWorkerty.SelectedIndex = lstWorkerty.IndexOf(tdettagli.usrWrkType)
End If
Else ' Elemento non visibile
If Panel1.NumberOfViews > 0 Then
Dim content As B4XView = Panel1.GetView(0)
content.RemoveViewFromParent ' Rimuovi il layout dal pannello
Layouts.Add(content) ' Aggiungi il layout alla lista per il riutilizzo
Panel1.RemoveAllViews ' Svuota il pannello
End If
End If
Next
' Rimuove il focus dai campi di testo impostando il focus su un componente generico
clvUsrLst.AsView.RequestFocus
End Sub