Italian Proprieta CostomListView

nonno

Active Member
Licensed User
Longtime User
Ragazzi è possibile selezionare un testo da una ListView e inserirlo all'interno di un altra ListView ?
leggo i dati da un file.txt, li inserisco nella ListView

leggo il file...
Do While line <> Null
i=i+1
clv2.Add(CreateListItem(line ,clv2.AsView.Width,70dip),70dip,$"Item{i}"$)

click sulla riga, il contenuto lo dovrebbe inserire all'interno di una nuova ListView.
ho fatto diverse prove ma nulla da fare.

Poi dovrei poter salvare i dati inseriti all'interno della nuova ListView.

Grazie Mille
 

sirjo66

Well-Known Member
Licensed User
Longtime User
quando fai click sulla riga, quale sub viene chiamata ?? Cosa hai scritto all'interno di questa sub ??
 

nonno

Active Member
Licensed User
Longtime User
Scusa ma non ho capito... non ho studiato informatica,
esempio; da file inserisco il nome "Capricciona " allinterno dell ListView1, cliccando su Capricciosa lo devo inserire all'interno di una nuova ListView2 dove ci saranno dei pulsanti per incrementare la quantità, aggiungere eventuali varianti ecc. alla fine se possibile devo poter salvare il tutto in un file, per inviare l'ordine al PC.

il problema mio come dici tu che non so come chiamare il sub !
Grazie Mille
 

nonno

Active Member
Licensed User
Longtime User
Risolto... Grazie Sisjo la tua domanda mi ha fatto riflettere...cavoluccioooo ci potevo pensare prima...
 

nonno

Active Member
Licensed User
Longtime User
Scusate ragazzi di nuovo avrei bisogno di un aiuto, ho creato due CustomView, la prima inserisco i dati letti da file, cliccando su questa inserisce i dati nella seconda CustomView, e fino qua tutto funziona, io vorrei creare il pulsante vicino al testo solo nella seconda, e non nella prima, ho fatto molte prove ma nulla funziona...
il codice che uso è riportato qua sotto, entrambi mi creano i pulsanti su tutte e due le listView.

con questo codice mi crea i pulsanti....
clv2.Add(CreateListItem(line,clv2.AsView.Width,70dip),70dip,$"Item #${i}"$)
clv2.Add(CreateListItem(line, clv2.AsView.Width, 50dip), 50dip, "")

questo non crea i pulsanti ma non funziona
clv2.AddTextItem(line,"")
Grazzie
 

LucaMs

Expert
Licensed User
Longtime User
Chiamala CustomListView, perché CustomView può essere qualunque View tu voglia creare da solo (Custom si può tradurre con "personale" o "personalizzata").

Ogni Item (riga) della CustomListView va creata e quindi potresti ottenere, volendo, decine di righe completamente diverse tra loro. In quello, che è solo un esempio di come costruire una "riga", viene creata nella routine CreateListItem. Tu potresti modificare questa CreateListItem per ottenere righe fatte come ti pare, con 2/3.. button, qualche label e tutto ciò che vuoi. Oppure potresti creare varie routine simili a CreateListItem, una per ogni tipo di "riga" che vuoi avere.

Inoltre, cosa ancora più consigliabile, puoi creare tramite Designer lo stile che deve avere un Item (riga) e caricarlo tramite LoadLayout.

Se alleghi il progetto (export as zip dal menu file) posso dargli un'occhiata, se la spiegazione è contorta, come penso :)
 

nonno

Active Member
Licensed User
Longtime User
Grazie Luca, in effetti la spiegazione è un tantino contorta ( per colpa mia non ho studiato informatica )
non riesco a caricare l'intera cartella zippata di 430 kb mi da errore, pur essendo inferiore hai 512 consentiti!
nella seconda ListView dove si dovrebbero trovare i pulsanti, dovrei poter inserire ulteriori dati, ed salvare tutto in un file.txt.

Grazie mille " siete sempre disponibili Grazie"

Sub Globals
Private clv1 As CustomListView
Private clv2 As CustomListView
Private Label1 As Label
Private Button1 As Button
Private Button2 As Button
Private qt As String
Private panl As Panel
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("1")
prodotti_click
End Sub
Sub clv1_ItemClick (Index As Int, Value As Object)
Activity.Title = Value
End Sub
Sub clv2_ItemClick(Index As Int, Value As Object)
Log(Index & " = " & Value)
End Sub
Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel
Dim p As Panel
p.Initialize("")
p.LoadLayout("CellItem")
p.RemoveView
Label1.Text = Text
Return p
End Sub
Sub Button1_Click
Dim index As Int = clv1.GetItemFromView(Sender)
Dim pnl As Panel = clv1.GetPanel(index)
Dim lbl As Label = pnl.GetView(0)
Dim btn As Button = pnl.GetView(0)
If btn.Text="" Then
btn.Text="0"
End If
qt=btn.Text+1
btn.Text=qt
'Msgbox("Item value: " & clv2.GetValue(index) & CRLF & "Check value: " & chk.Checked, "")
End Sub
Sub Button1_LongClick
Dim index As Int = clv1.GetItemFromView(Sender)
Dim pnl As Panel = clv1.GetPanel(index)
Dim lbl As Label = pnl.GetView(0)
Dim btn As Button = pnl.GetView(0)
If btn.Text="" Then
btn.Text="0"
End If
qt=btn.Text-1
btn.Text=qt
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub prodotti_click
Dim i As Int
Dim fileProd As String
Dim Button1 As Button
fileProd="Pizze.txt"
Private Reader As TextReader
Reader.Initialize(File.OpenInput(File.DirRootExternal, fileProd))
Private line As String
line = Reader.ReadLine
'*****************Label1.Text=line
Do While line <> Null
i=i+1

clv2.Add(CreateListItem(line, clv2.AsView.Width, 50dip), 50dip, "")

Log(line)
line = Reader.ReadLine
Loop
Reader.Close
End Sub
Sub Button2_Click
End Sub
Sub Label1_Click
Dim index As Int = clv2.GetItemFromView(Sender)
Dim pnl As Panel = clv2.GetPanel(index)
Dim lbl As Label = pnl.GetView(1)
clv1.Add(CreateListItem(lbl.Text ,clv1.AsView.Width,70dip),70dip,$"Item{i}"$)
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Intanto allego un esempio (mooolto brutto, i layout creati al volo sono orripilanti, hehehe) ma almeno servirà a spiegare meglio quello che volevo dire nel post #6.

Poi provo a capire il codice che hai postato sopra (quando pubblichi codice, inseriscilo usando il menu Code:
upload_2016-8-8_14-13-54.png


così si legge meglio.


[Non stare tanto a rigranziar-mi/ci, è un piacere dare una mano... magari metti qualche Like ai post, così recupero un po' :)]
 

Attachments

  • CLV con Loadlayout.zip
    15.3 KB · Views: 195

LucaMs

Expert
Licensed User
Longtime User
B4X:
Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel
Dim p As Panel
p.Initialize("")
p.LoadLayout("CellItem")
p.RemoveView
Label1.Text = Text
Return p
End Sub

Questa è la routine che usi per creare una voce (item - riga) di UNA CustomListView (come detto, potresti creare una routine simile a questa per tipi diversi di righe, oppure usare un metodo simile a quello che ho usato nel progetto che ho allegato al post #8).

Però carichi un layout nel pannello P e poi lo rimuovi (p.RemoveView), quindi sparisce!

P.S. ops, non avevo notato che non solo rimuovi il pannello ma nemmeno lo aggiungi, prima! Non so come mai non ti dia errore, oltretutto
 
Last edited:

nonno

Active Member
Licensed User
Longtime User
Scusa Luca, nel mio progetto ho già una Sub CreateListItem

come faccio a crearne una nuova per avere un pannello diverso, la devo creare all'interno della stessa (Sub CreateListItem ) cosi non funziona.
potresti per favore dirmi con quale nome di sub la devo creare?...
la creo all'interno della Activity Main
poi devo modificare o aggiungere qualcosa nel modulo CostomListView ?
ho un dubbio con la rimozione del pannello (lo creo e lo rimuovo subito anche qui ho dei dubbi, è corretto o lo devo rimuovere quando non mi serve più? se cerco di rimuoverlo al di fuori della rutin deve ho creato il pannello mi da errore:mad::mad::mad::mad:
Scusate per voi sono sicuramente delle domande banali, non conosco ancora bene B4A.:(

Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel
Dim p As Panel
p.Initialize("")
p.LoadLayout("CellItem")
p.RemoveView
lbl.Text = Text
Return p
End Sub

Grazie Mille
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Il nome CreateListItem è un nome inventato da Erel in quel progetto; poteva anche chiamarlo PincoPallo, ma poi non avrebbe capito al volo a cosa serve; quindi puoi dargli i nomi che ti pare, anche in italiano e puoi creare una routine per ogni diverso tipo di Item che vuoi visualizzare.

Però, se hai visto l'esempio che ho allegato al post #8, hai visto che per creare 3 tipi diversi di Item della CustomListView ho usato un'unica routine, in modo molto semplice: gli passo alcuni parametri e uno di questi è il nome del file layout da caricare nel pannello. Ti consiglierei di usare quella routine.

Il pannello non devi rimuoverlo in quelle routine, che servono alla costruzione dell'Item. Quando serve rimuovere un item (mettiamo che l'utente lo tocchi per volerlo rimuovere) devi farlo tramite i comandi della CustomListView, ovvero clv.RemoveAt (se clv è il nome che tu hai dato alla CustomListView).
 

nonno

Active Member
Licensed User
Longtime User
Mi ero promesso di non chiedere più aiuto e di cercare di arrangiarmi da solo, ho scaricato i libri da voi consigliati... non so nulla di inglese per cui la vedo molto dura.
i consigli di Luca su come creare i pannelli ( o meglio l'esempio che mi ha fatto funziona benissimo )
il pannello "panel1 nel quale contiene solo Label1" lo creo all'interno di una rutin mentre leggo i dati da un file li inserisco in Label1.Text= file e questo funziona.

all'interno della Sub Label1_click richiamo "panel2 il quale contiene Label2, Button1, Button2"
cliccando sul una qualsiasi riga del pannello1 dovrebbe inserire il testo all'interno della Label2 ( Label2.text=Label1.txt ) invece mi ritrovo solo i due pulsanti Button1 e Button2:mad: la casella Label2 rimane vuota.

il primo pannello che uso per leggere i dati del file funzionano sia che uso panel1 oppure panel2.:confused::confused::confused::confused:
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Detto così non si capisce.

Direi che puoi allegare il tuo progetto (usando il menu File - Export As Zip) oppure... spiegare con un disegnino :) (sembra una cosa stupida ma un'immagine vale più di 1.000 parole!).

A quanto ho capito hai due CustomListView: vuoi per caso ottenere che in quella di sinistra ci siano cose tipo:
Pizze
Pastasciutte
Minestre
...
e in quella di destra un elenco in base a cosa si sceglie e a sinistra? Tipo: dalla prima CustomListView si seleziona Pizze e in quella di destra compaiano Margherita, Funghi, 4 stagioni...?
 

nonno

Active Member
Licensed User
Longtime User
Grazie Luca si hai capito giusto, quella sotto clv2, contiene la lista completa delle pizze, selezionando quella che desidero tipo "Margherita" la deve inserire in quella sopra clv1.
risolto questo, devo poter salvare il contenuto di clv1 all'interno di un file.
Grazie mille
 

Attachments

  • CustomListView.zip
    455.9 KB · Views: 248

LucaMs

Expert
Licensed User
Longtime User
Ti rispondo lentamente, passo per passo... anche perché ho mal di testa :mad:.

Intanto, guarda a destra il Tab Log: lì trovi tutti gli errori o i "warnings" (avvertimenti) che B4A ha già trovato nel sorgente.
upload_2016-8-11_13-11-2.png


Purtroppo sono in inglese; aiutati con Google Translator ;)

Primo punto: i file che aggiungi, come Pizze.txt, devi inserirli nel progetto tramite il Tab "Files Manager" - "Add Files" (poi se devono essere modificati dal progetto stesso, vanno spostati, perché inseriti in quel modo finiscono in una cartella nella quale non sono più modificabili).
 
Top