e dove rimane il piacere?@Filippo non ti fare sempre desiderare!
Intervieni prima! ? ? ?
Qualche esperienza con altri linguaggi (sempre base Basic).Ma voi a parte anni di esperienza (che vogliono dire tanto), come avete imparato tutte queste cose?
Hai fatto benissimo a fare i corsi.Io al momento ho fatto 2 corsi di B4A su Udemy che mi hanno dato le basi e insegnato come muovermi, ma partivo da zero e vedo che tante cose sono ancora arabo per me e non so se riuscirò da solo ad andare fino in fondo a questo progetto. Un corso sul linguaggio Basic potrebbe aiutare?
@Filippo grazie, ma purtroppo mi crasha al primo CurGetString con questo errore: "android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1" Sai a cosa si riferisce?io penso che così dovrebbe funzionare.
B4X:xclv.Add(p, rs.getstring("ID")) Private Sub xclv_ItemLongClick (Index As Int, Value As Object) cur = Starter.sqlPlayers.ExecQuery("Select Gen, Pos1, Pos2 from PLAYERS WHERE ID='"& Value & "'") Log(cur.GetString("Pos1")) Gen = rs.GetInt("Gen") Pos1 = cur.GetString("Pos1") Pos2 = cur.GetString("Pos2") End Sub
Private Sub xclv_ItemLongClick (Index As Int, Value As Object)
Dim Gen As Int
Dim Pos1 As String
Dim Pos2 As String
cur = Starter.sqlPlayers.ExecQuery("Select GEN, Pos1, Pos2 from PLAYERS WHERE ID='"& Value & "'")
Pos1 = cur.GetString("Pos1")
Pos2 = cur.GetString("Pos2")
Gen = cur.GetInt("GEN")
id = Value
Log(id)
Log(Pos1)
Log(Pos2)
Log(Gen)
End Sub
Grazie mille per i consigli @Sagenut! Sono preziosi! Si, per come sono fatto io non mi limito a copiare il codice, considera che quando chiedo aiuto qui solitamente sono già stato diverso tempo a batterci la testa proprio per cercare di capirne il meccanismo e arrivare alla soluzione da solo.Qualche esperienza con altri linguaggi (sempre base Basic).
Ma io lo faccio come passatempo quindi ho tantissimo da imparare come te.
Hai fatto benissimo a fare i corsi.
Tante cose che ora sono Arabo diventeranno più chiare a mano a mano che chiarisci alcuni concetti di base che poi tenderanno a ripetersi.
L'importante è che quando trovi, o ti forniscono, codice che funziona e risolve una tua necessità tu non ti limiti a copiarlo e basta.
Devi prenderti il tempo di capire perchè quella cosa funziona così.
Poi si può arrivare ad uno stesso risultato in maniere diverse, che quindi sono tutte giuste fondamentalmente ma ce ne saranno sempre alcune migliori in termini di velocità o semplicità del codice.
C'è sempre tempo per mettere mano anche a vecchi codici quando impari nuove istruzioni e metodi.
Un corso di Basic potrebbe anche esserti utile ma al momento puoi cercare/studiare quel che ti serve volta per volta e capirlo.
Il tuo progetto in qualche modo lo finirai, poi lo migliorerai.
Ma non devi avere fretta e non ridurti solo a copiare e incollare codice.
metti un log(Value) prima della riga@Filippo grazie, ma purtroppo mi crasha al primo CurGetString con questo errore: "android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1" Sai a cosa si riferisce?
cur = Starter.sqlPlayers.ExecQuery("Select GEN, Pos1, Pos2 from PLAYERS WHERE ID='"& Value & "'")
Avevo già provato, ma con Value mi da l'ID che è alfanumerico (ad esempio: "BealBr1"). Ho provato anche a mettere il log di Index e mi da un numero che corrisponde al numero della riga (ad esempio 5 che è la sesta riga) ma di -1 non ne ho.metti un log(Value) prima della riga
e guarda qual'è il valore. Se è -1, allora l'errore ci stà.B4X:cur = Starter.sqlPlayers.ExecQuery("Select GEN, Pos1, Pos2 from PLAYERS WHERE ID='"& Value & "'")
xclv.Add(p, rs.getstring("ID"))
Si esatto, è una string e corrisponde ad un codice alfanumerico come quello. Perché non può funzionare? cur funziona solo con i numeri? E se uso rs è lo stesso?qual'è il valore di quello che inserisci qui?
log(rs.getstring("ID"))
se questo corrisponde ad es. a "BealBr1", allora non può funzionare.B4X:xclv.Add(p, rs.getstring("ID"))
Sub xclv_ItemClick (Index As Int, Value As Object)
Dim PlayerName As String = xclv.GetPanel(Index).GetView(0).Text
Dim Pos1 As String = xclv.GetPanel(Index).GetView(1).Text
Dim Pos2 As String = xclv.GetPanel(Index).GetView(2).Text
Dim Team As String = xclv.GetPanel(Index).GetView(3).Text
Dim GEN As String = xclv.GetPanel(Index).GetView(4).Text
End Sub
Domanda:Si, ma avevo solo inserito i codice che mi avevi dato
B4X:Dim Pos1 As String = xclv.GetPanel(Index).GetView(3).Text Dim Pos2 As String = xclv.GetPanel(Index).GetView(4).Text Dim GEN As String = xclv.GetPanel(Index).GetView(5).Text
Il layout contiene un panel che contiene le 5 label + 1 altro panel che uso da divisorio tra una riga e l'altra. Ho allegato uno screen.Domanda:
il tuo layout degli item della CLV contiene solo le 5 Label e niente altro?
Dim p As B4XView = xui.CreatePanel("")
dim s as String = xclv.GetPanel(index).GetView(0).Getview(0).text
dim p as panel = xclv.GetPanel(Index).GetView(0)
dim pnlPlayer as panel = p.getview(0)
dim Pos1 As String = pnlPlayer .getview(2).text
..
Assolutamente sìRisolto questo punto, io passerei ad utilizzare B4xView in modo da non essere confinato ad una specifica piattaforma.
Si, so che lo avevo già creato con quella riga di codice ma non riuscivo a farlo adattare allo schermo, così ho creato quel panel in modo da farlo adattare a tutti gli schermi con lo script e poi l'ho usato come riferimento in questa rigaNon sò bene il tuo scopo e il loro utilizzo............. però credo che i 2 Panel dal Layout li puoi rimuovere, se non hanno un ruolo specifico.
Il panel di base lo crei già nella Sub dove popoli la CLV
B4X:Dim p As B4XView = xui.CreatePanel("")
p.SetLayoutAnimated(0,0,0,pnlPlayer.Width,pnlPlayer.Height)
Esatto ? Non sapevo che esistesse anche quel metodo, grazie per l'informazione, come sempre preziosa! Ma quella linea l'ho fatta come gradiente che sfuma da nero a trasparente che è più delicata e mi sembra che tramite quelle impostazioni non si possa.L altro panel sembra che tu lo voglia usare per avere una linea colorata per dividere gli Item.
Se guardi nelle proprietà della CLV nel Designer vedrai che ci sono già
Divider Color
Divider Height
che ti permettono di personalizzare una linea divisoria già compresa nella CLV.
Ho indovinato?
Grandissimo @Sagenut!!! ?? Così ci sono riuscito a prendere tutti i dati che volevo!!! ???Se invece vuoi mantenere i tuoi Panel perchè ti servono puoi accedere alle Label così:
B4X:
dim s as String = xclv.GetPanel(index).GetView(0).Getview(0).text
Perchè:
xclv.GetPanel(index) --- Prende il panel dell'Item dalla CLV
.GetView(0) --- Prende il tuo pnlplayer che è la prima view ed è il contenitore di tutte le altre così come lo hai usato
.GetView(0) --- Prende la prima Label contenuta nel tuo pnlplayer.
Essendo un contenitore extra ha di nuovo la sua lista di view che riparte da 0.
Grazie @udg! Nella mia ignoranza credevo di averlo fatto... Non sto già usando B4xView? Dove sbaglio?Risolto questo punto, io passerei ad utilizzare B4xView in modo da non essere confinato ad una specifica piattaforma.
Darei un'occhiata anche alle Anchors del layout (es. lblGen a dx, lblName su both, così come pnlPlayer)
Ecco, sicuramente sarebbe meglio, ma non ho idea di come si faccia una map... ? Dove posso trovare info su come fare?ps: come Value potresti passare una map che contenga già tutti i valori che ti interessano ed evitare di accedere di nuovo al DB oppure ai valori del panel della xCLV che potrebbero essere parziali (nel senso che sono solo quelli che mostri ma potresti avere altri campi cui sei interessato).
Trovi praticamente qualunque informazione, spesso con esempi, con la ricerca del forum che funziona decisamente bene.Dove posso trovare info su come fare?
La risposta più semplice è quella di cercare sul forum (cerca "map" e vedrai le tonnellate di risposte..heheh)Dove posso trovare info su come fare?
dim m as map
m.initialize
m.put("key1", "valore1")