Italian Ci riprovo...

LucaMs

Expert
Licensed User
Oltre a poter mostrare il mondo, invece che due righe ed una bitmap, quali sono i vantaggi? Come al solito c'ho capito poco...
Prima di guarda i vantaggi di CLV, c'è il grande svantaggio della ListView: tutti gli item devono avere un'unico stile, colori compresi.
Se, ad esempio tu volessi evidenziare un item, magari penseresti di cambiare una impostazione di una delle due label di questo item e non puoi farlo, perché automaticamente verrebbero modificati tutti gli item.

Poi c'è quello che hai detto, in un item CLV puoi mettere ciò che vuoi ed è raro che tu debba visualizzare solo due testi per Item (+ eventuale bitmap).

Non sono ancora così sveglio (senza nemmeno un caffè :() da ricordare al volo metodi vantaggiosi rispetto alla ListView, però vedrai che ci sono alcune versioni particolari di CLV o esempi di utilizzo di questa, come ad esempio quella che ti consente di caricare N item per volta, potendo anche riutilizzare gli elementi grafici degli item stessi, il che consente di scorrere migliaia di item senza doverli caricare tutti dall'inizio, cosa che richiede tempo e... pazienza dell'utente.

Un altro esempio ti consente di poter scorrere orizzonatalmente un pannello orizzontalemente, posto all'interno di un item.

Cmq, già il facco di poter inserire combobox, checkbox, tutti i tipi di view che vuoi, comprese delle custom view, è un motivo più che valido.

Piuttosto, se sei certo di voler sviluppare il tuo sw solo per Android, la "normale" CustomListView è più semplice da usare, rispetto alla (multipiattaforma) xCustomListView (x sta appunto per B4X).
 

LucaMs

Expert
Licensed User
... dimenticavo... c'è anche questa mia versione:

che ha queste cosette in più, rispetto alla CLV originale:

B4X:
'xCustomListView v1.73 LM
'    Added MultipleSelection:
'        Property MultipleSelection
'        Property SelectedIndices
'        Property SelectedValues
'        Public method UnselectAll
'        Public method AddSelectedIndices
'    Added private method SetPressedColor
'        and modified PanelClickHandler to use it.
'    Reorganized into Regions.
'
'xCustomListView v1.72 LM
'     Added SetValue and GetAllValues
 

LucaMs

Expert
Licensed User
Questi, probabilmente, sono metodi e proprietà non disponibili nelle ListView:

B4X:
    xCLV.FirstVisibleIndex
    xCLV.FindIndexFromOffset
    xCLV.InsertAt
    xCLV.JumpToItem
    xCLV.LastVisibleIndex
    xCLV.ReplaceAt
    xCLV.ResizeItem
    xCLV.ScrollToItem
 

Luigi S

Member
Licensed User
Minchia come corri... scusa il francesismo.... ricordati che sono un pivello...
Ok sono riuscito a scriver e pure a leggere dal db ora mi manca l'update...
Il bello è che il codice che ho scritto (ahem...scopiazzato) non da errore ma non updata niente!
 

LucaMs

Expert
Licensed User
Minchia come corri... scusa il francesismo.... ricordati che sono un pivello...
Ok sono riuscito a scriver e pure a leggere dal db ora mi manca l'update...
Il bello è che il codice che ho scritto (ahem...scopiazzato) non da errore ma non updata niente!
Proprio pivello non direi, visto che ti sei "disegnato" un bel db.

Il bello è che il codice che ho scritto (ahem...scopiazzato) non da errore ma non updata niente!
Non c'è alcunché di male nello scopiazzare; è come se volendo sviluppare un sw dovressi ricreare da zero ogni cosa.
La cosetta dell'update che sembra non avere effetti ho visto che è capitata a molti e che nel 99% dei casi è perché si aggiorna un db e si cercano le modifiche... in un altro, ovvero in una copia posta altrove.
 

Luigi S

Member
Licensed User
Ho un po' di esperianza dovuta a qualche sitoweb amatoriale che curo, diciamo che mi hanno presentato tre tizi... SQL, PHP e HTML ma ciò parlato poco... 😄

Non dovrebbe essere questo il problema, perchè ho creato un modulo codice dove c'è la connessione al db e viene richiamato dove richiesto... bho...

Comincio a pensare a qualche problema di logica tra "save" e "update"
 

Luigi S

Member
Licensed User
La cosetta dell'update che sembra non avere effetti ho visto che è capitata a molti e che nel 99% dei casi è perché si aggiorna un db e si cercano le modifiche... in un altro, ovvero in una copia posta altrove.
...e mi sa che hai ragione....
 

Luigi S

Member
Licensed User
Credo che il parametro "value" del List_itemClick presente Activity main, non viene usato nella Activity input dove faccio anche l'update. Mi sono inventato di renderlo una variabile globale, ma non funziona lo stesso. Se è cosi come risolvo?
 

LucaMs

Expert
Licensed User
Credo che il parametro "value" del List_itemClick presente Activity main, non viene usato nella Activity input dove faccio anche l'update. Mi sono inventato di renderlo una variabile globale, ma non funziona lo stesso. Se è cosi come risolvo?
Se avessi capito, risponderei 😄
 

Luigi S

Member
Licensed User
Ho questa che sta nel main
B4X:
Sub ListAeroModView_ItemClick (Position As Int, Value As Object) 'update Aeromodelli
    ValueA = "Value"
    Status = "U" 'U for update
    
    Connection.myCUR = Connection.mySQL.ExecQuery("SELECT*FROM Aeromodelli WHERE Nome= '" & Value & "'")
    For i=0 To Connection.myCUR.RowCount -1
        Connection.myCUR.Position = i
        ID = Connection.myCUR.GetString("ID")
        Nome = Connection.myCUR.GetString("Nome")
        Stato = Connection.myCUR.GetString("Stato")
        DataCollaudo = Connection.myCUR.GetString("DataCollaudo")
        Descrizione = Connection.myCUR.GetString("Descrizione")
        MinVoloTot = Connection.myCUR.GetString("MinVoloTot")
        IDcomponenti = Connection.myCUR.GetString("IDcomponenti")
    Next
    
    StartActivity(Input_Aeromodello)
    Activity.Finish
End Sub
e questa che sta in input

B4X:
Sub BtnOk_Click
    'check empty field
    If edtNomeMod.Text = "" Then
        MsgboxAsync("Inserisci il nome","")
        Return
    End If
    
    If Main.Status = "S" Then ' save
        Dim Query As String
        Query = "INSERT INTO Aeromodelli VALUES (?, ?, ?, ?, ?, ?, ?)"
        Connection.mySQL.ExecNonQuery2(Query, Array(Null,edtNomeMod.Text, edtStato.Text, edtDataCollaudo.Text, edtDescrizione.Text, edtMinVoloTot.Text, Null ))

    Else If Main.Status = "U" Then 'update
            
        Connection.mySQL.ExecNonQuery("UPDATE Aeromodelli SET Nome='" & edtNomeMod.Text & "',Stato='" & edtStato.text & "',DataCollaudo='" & edtDataCollaudo.text & "',Descrizione='" & edtDescrizione.text & "' WHERE Nome='" & ValueA & "'")
    
    End If
    
    'back to main
    StartActivity(Main)
    Activity.Finish
End Sub
Ora con la condizione status S o U capisco se vengo dal btnAggiungi e quindi salva su un nuovo record, o da un elemento della lista e quindi aggiornarlo, credo che non gli piace il WHERE Nome='" & ValueA & "' dove tra le variabili globali c'è Dim ValueA As Object

Come dicevo non mi da errori ma non aggiorna nulla. Spero di essere stato chiaro, se vuoi qualche info in più, sto qua, o faccio prima a passarti tutto?
 

LucaMs

Expert
Licensed User
Va abbastanza bene (anche se ti suggerirei di creare un Type TAeromodello(ID As String, Nome As String, ...) - ID String? Meglio un Int autoincrementato, ma ok.

Ma non vedo la parte in cui riempi le view della Activity di input!

Se vuoi passarmi il progetto... credo di impiegare poco a dargli una mia aggiustata.

Usa l'export del progetto e pubblicalo qui o in privato, se preferisci.
 
Last edited:

udg

Expert
Licensed User
ValueA = "Value"
Così direi che cerchi di effettuare l'update dei dati di un aereomodello denominato Value.
Ammesso che il Values secondo parametro dell'ItemClick sia una stringa e rappresenti il nome del modello deisderato, allora dovrebbe bastarti cambiare quella riga in
ValueA = Value
Eventualmente aggiungi un log(ValueA) così vedì cosa passi alla fase successiva..
 

Luigi S

Member
Licensed User
hmm grazie dei suggerimenti, ma non c'ho capito un granche'... ve l'ho detoo che sono pivello no?

Comunque vi ringrazio dell'offerta di dare un'occhiata e vi passo il progetto cosi forse imparo un metodo per fare quello che non riesco.
Sarebbe bello se commentate le modifiche che fate per poter apprezzare meglio.
 

Attachments

LucaMs

Expert
Licensed User
Una cosa te la dico subito: perché creare un cursore pubblico in quel modulo? Non mi piace e, soprattutto, devi chiuderlo, dopo ogni operazione, questo è stato probabilmente l'errore.
 

Luigi S

Member
Licensed User
Non so che intendi per cursore pubblico.... è meglio che commenti il codice se vuoi farmi capire.
 

LucaMs

Expert
Licensed User
Non so che intendi per cursore pubblico.... è meglio che commenti il codice se vuoi farmi capire.
Quello lo sto facendo comunque (e quanto lavoro! Al termine dovrò rilasciare fattura 😂).

Lo hai creato tu, quel cursore:

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim mySQL As SQL
    Dim myCUR As Cursor ' <---- QUESTO
End Sub
Ah, forse era un copia e incolla ;)

Il problema e che esegui query usando poi quel cursore ma non lo chiudi, dopo l'operazione eseguita.
 

LucaMs

Expert
Licensed User
Maremma... chi me l'ha fatto fare! Che poi... mi appassiono!
C'è un po' troppo da lavorare.
Ad esempio, il DB è sbagliato. Hai dei campi primari univoci Integer con autoincremento (giusto) ma poi nelle tabelle collegate hai questi campi dichiarati come TEXT

Tabella Componenti:
"ID" INTEGER PRIMARY KEY AUTOINCREMENT e va benissimo

Tabella Aeromodelli:
"IDcomponenti" TEXT questa è la chiave esterna, collegata alla tabella Componenti; anche questa, quindi, dev'essere INTEGER


Poi... chiamare l'Activity Input_Aeromodello per Update o Save??? Mah!
 

LucaMs

Expert
Licensed User
Mi spiace, c'è troppa roba da cambiare e tantissima ne ho già cambiata.

Ci sto lavorando dalle 18:45 circa e sono le 20:25!

Allego il progetto, con le tante modifiche - anche ai tipi di dati nel db, che comunque non va bene, tutte segnate con <LM>, così puoi facilmente trovarle.
 

Attachments

Last edited:
Top