Italian Listview smemorina

LordZenzo

Well-Known Member
Licensed User
Longtime User
huff, certe volte sbatterei la testa al muro

ecco cosa faccio
carico una list con
B4X:
ListView8.AddTwoLines2(Mm.Get("Mittente")&" :"&Mm.Get("Titolo")&" , del  "&Mm.Get("data"),Mm.Get("Messagio"),Mm)

in questo modo se faccio click su una voce della lista mi torna la mappa dove ci sono altri valori

B4X:
Sub ListView8_ItemClick (Position As Int, Value As Object)
    MessagioLetto.Clear
    MessagioLetto=Value
    Panel12.visible=True
    Label30.Text=MessagioLetto.Get("Titolo")
    EditText6.Text=MessagioLetto.get("Messagio")
    EditText6.InputType=EditText6.INPUT_TYPE_NONE
    EditText6.SingleLine=False
End Sub

ma quando faccio nuovamente click sulla voce la mappa e vuota
ndo! sbaio
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
mi par di capire che usando
MessagioLetto=Value
e quando eseguo MessagioLetto.Clear ad un successivo uso della sub, viene cancellato anche il Value che cossisponde alla mappa memorizata nella list
ma come faccio a caricare i valori di Value nella map MessagiLetto senza dover legare i due oggetti in uno solo?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
io toglierei
MessagioLetto.Clear
mentre la riga
MessagioLetto=Value
la sostituirei con:
Dim MessagioLetto As Map = Value

Comunque la parola Messagio va scritta con 2 g ;)

Sergio
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
Comunque la parola Messagio va scritta con 2 g
hai ragiona, ma ormai lo scritto cosi anche nel php e deldatabase... resta cosi, tanto il nome della variabile non viene letta dagli utenti
io toglierei
MessagioLetto.Clear
in effetti ho fatto cosi ma non mi piace, sono abituato ad azzerare le map prima di usarle
la sostituirei con:
Dim MessagioLetto As Map = Value
in questo modo se cancello la prima ,la seconda resta?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Ho creato un nuovo progetto, ho creato un layout (chiamato "main") con dentro semplicemente una ListView, una Label ed un EditText,
e poi queste due routine:
B4X:
Sub Activity_Create(FirstTime As Boolean)

   Activity.LoadLayout("main")
  
   ListView1.Clear ' azzero la lista
  
   ' carico un po' di dati sulla ListView
   Dim Mm As Map
   Mm.Initialize
   Mm.Put("Mittente","Mittente 1")
   Mm.Put("Titolo","Titolo 1")
   Mm.Put("data","Data 1")
   Mm.Put("Messagio","Messaggio 1")
   ListView1.AddTwoLines2(Mm.Get("Mittente") & ": " & Mm.Get("Titolo") & ", del  " & Mm.Get("data"), Mm.Get("Messagio"), Mm)
   Dim Mm As Map
   Mm.Initialize
   Mm.Put("Mittente","Mittente 2")
   Mm.Put("Titolo","Titolo 2")
   Mm.Put("data","Data 2")
   Mm.Put("Messagio","Messaggio 2")
   ListView1.AddTwoLines2(Mm.Get("Mittente") & ": " & Mm.Get("Titolo") & ", del  " & Mm.Get("data"), Mm.Get("Messagio"), Mm)
   Dim Mm As Map
   Mm.Initialize
   Mm.Put("Mittente","Mittente 3")
   Mm.Put("Titolo","Titolo 3")
   Mm.Put("data","Data 3")
   Mm.Put("Messagio","Messaggio 3")
   ListView1.AddTwoLines2(Mm.Get("Mittente") & ": " & Mm.Get("Titolo") & ", del  " & Mm.Get("data"), Mm.Get("Messagio"), Mm)
  
End Sub

Sub ListView1_ItemClick (Position As Int, Value As Object)

   Dim MessagioLetto As Map = Value
   Label1.Text = MessagioLetto.Get("Titolo")
  EditText1.Text = MessagioLetto.Get("Messagio")

End Sub

Ogni volta che clicco su una voce della ListView mi vengono riportati i dati sulla Label e sulla EditBox, io non riesco a capire quale problema tu abbia, spiegati meglio altrimenti non posso aiutarti
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
innanzi tutto io non uso una map locale, ma generale,
in questo modo facendo click sulla listview la map generale viene popolata con la map presente nella listview
ma se in un altro punto del programma cancello la map generale automaticamente viene cancellata anche la map dentro la item della listview
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
il problema credo sorga dal fatto che facendo Map1=Map2 a livello di memoria entrambe le variabili/map puntano allo stesso indirizzo di memoria per cui cancellando la prima, la seconda si ritrova a puntare ad un indirizzo di memoria vuoto
 

sirjo66

Well-Known Member
Licensed User
Longtime User
facendo Map1=Map2 a livello di memoria entrambe le variabili/map puntano allo stesso indirizzo di memoria

Esatto, il problema è proprio questo,
facendo Map1 = Map2 non si duplicano le mappe, ma semplicemente i puntatori vengono settati alla stessa zona di memoria
 

LucaMs

Expert
Licensed User
Longtime User
Premesso che con:
ListView8.AddTwoLines2(Mm.Get("Mittente")&" :"&Mm.Get("Titolo")&" , del "&Mm.Get("data"),Mm.Get("Messagio"),Mm)
ti esce fuori una schifezza non allineata e che quindi dovresti usare una CustomListView o una CheckList...


cosa devi ottenere? La possibilità di modificare un Item della ListView e quindi della Map associata (anche se adoro le Map, in questo caso userei un Type che rappresenti un "record", Type tMsg(Mittente As String, Titolo As String, Messaggio As String)).

Se è così, penso che dovresti creare una variabile globale MsgCorrente As Map; poi:
B4X:
Sub ListView8_ItemClick (Position As Int, Value As Object)
    MsgCorrente = Value
Panel12.visible=True
Label30.Text=MsgCorrenteGet("Titolo")
EditText6.Text=MsgCorrenteget("Messagio")
EditText6.InputType=EditText6.INPUT_TYPE_NONE  ???
EditText6.SingleLine=False
End Sub

e quando vai a modificare EditText6 (PESSIMO NOME!) modifichi anche il contenuto di MsgCorrente (e ricarichi anche l'Item, ovviamente)
 
Top