Italian Listview o edittext

Antonio67

Member
Ciao a tutti, vorrei creare con b4a, un semplice promemoria.usando una edittext, pero ho un problema e cioè : scrivo il testo es. Domani telefona banca. E lo memorizzo poi inserisco un'altro testo es. Le chiavi sono ne vaso. E lo memorizzo ora succede che nell'edittext le frasi memorizzate vengono ripetute piu di una volta cioe 2 volte Domani telefona banca" e "le chiavi sono nel vaso" . la edittext e impostata su wrap.true e singlelina in false. In alternativa sarebbe meglio una listview?Aiutino? Grazie
 
Last edited:

LucaMs

Expert
Licensed User
Ciao.

Sicuramente un EditText non va bene, anche perché dovrai poi anche eliminare le azioni compiute.

Le ListView hanno molti limiti (non rispetto allle EditText, ovviamente).

Nel tuo caso l'ideale è una CheckList.
 

Antonio67

Member
Ciao Luca, la checklist non l'ho trovata ne tantomeno non so come crearla,sono all'inizio:p la mia app lo composta cosi: ho una listview per i dati,un edittext per scrivere i dati e passarli nella listview,un button per salvare il testo,un button per cancellare ciò che non mi serve e un button per uscire.Quando scrivo i dati nell'edittext vorrei fare in modo che il testo passa nella listview,l'edittext si pulisce e il testo si memorizza nella directoty.Ora il problema e questo: quando salvo il testo,questo si viene memorizzato nella directory ma non lo visualizzo nella listview. Per passare il testo nella listview uso: dim x as string
x=edittext.text listview.addsingleline=x per vedere il testo salvato volevo usare nell'activity_create :
If File.Exists(File.DirDefaultExternal,"memo.text") Then
leggi.Initialize(File.OpenInput(File.DirDefaultExternal,"memo.text"))
Lista.AddSingleLine=leggi.ReadList
leggi.Close
End If. Ma mi da errore su Lista.AddSingleLine=leggi.ReadList. E non riesco a venire a capo:(
 

LucaMs

Expert
Licensed User
Come non l'hai trovata? Ti ho messo il link (clicka su CheckList colorata nel post precedente ;)).

Comunque, AddSingleLine non va bene, altrimenti scriverebbe tutto ciò che trova nel file in un unico elemento (item) della ListView.


B4X:
Dim Lista As ListView

Sub Salva
    Dim lst As List
    lst.Initialize
    For i = 0 To Lista.Size - 1
        lst.Add(Lista.GetItem(i))
    Next
    File.WriteList(File.DirInternal, "memo.txt")
End Sub

Sub Leggi
    Dim lst As List
    lst.Initialize
    lst = File.ReadList(File.DirInternal, "memo.txt")
    Lista.Clear
    For i = 0 To lst.Size -1
        Lista.AddSingleLine(lst.Get(i))
    Next
End Sub
Non l'ho provato, scritto al volo. Nota che ho preferito DirInternal, ma se tu vuoi DirRootExternal... con questa attualmente ci sono problemi, io eviterei.
 

Antonio67

Member
ok per il momento funziona alla grande ho inserito
Sub LeggiDim lst AsList
lst.Initialize
lst = File.ReadList(File.DirInternal, "memo.txt")
Lista.ClearFor i = 0To lst.Size -1
Lista.AddSingleLine(lst.Get(i))NextEnd Sub
nell'activity_create e sono apparsi tutto cio che avevo scritto in precedenza. Grazie 10000000000
spero di non disturbarti per qualche altro proble
 

Antonio67

Member
Non ho finito di parlare e ce un'altro problema:mad: e che gli elementi cancellati ritornano all'apertura. per singolo elemento:
Sub Lista_ItemLongClick (Position As Int, Value As Object)
Lista.RemoveAt(Position)
End Sub
per tutto:
Sub ButCanc_Click
Lista.Clear
End Sub
gli elementi si cancellano ma ritornano.....uffaaaaaa
 

LucaMs

Expert
Licensed User
Certo, perché con Lista.RemoveAt lo cancelli dalla ListView, non dal file e quando la ListView viene ricaricata dal file...!

Le routine andrebbero lasciate così, non "messe in un button":

Sub btnSalva_Click
Salva
End Sub

Andrebbe fatto sempre così; infatti, in questo caso, dopo aver eliminato la voce dalla ListView:
Sub Lista_ItemLongClick (Position As Int, Value As Object)
Lista.RemoveAt(Position)
Salva
End Sub

puoi richiamare Salva (molti in questo caso richiamerebbero btnSalva_Click!)

E' meglio prendere l'abitudine di lasciare separato il codice (le routine come Salva) dell'interfaccia grafica (la routine evento btnSalva_Click).
 

Antonio67

Member
Sempre gentile, la cosa buffa e che più provo e più nascono problemi,l'ultimo? : a parte che non si cancellano (codice errato logicamente) e che ho notato che gli elementi si ripetono infatti ho 3 volte lo stesso testo. Non so se piangere o ridere:confused: in pratica mi consigli di non effettuare una routin direttamente dai button ma dalle sub,mi piego: es. Sub salvatesto
testo.initzializze (file.output.ecc........) poi sul button_click salvatesto. cosi? Perche poi? scusa ti sto facendo perdere tempo.
 
Last edited:

LucaMs

Expert
Licensed User
Se vuoi puoi esportare il progetto (usando il menu File - Export As Zip) e allegarlo ad un post o inviarmerlo tramite email, così lo correggiamo.

in pratica mi consigli di non effettuare una routin direttamente dai button ma dalle sub,mi piego: es. Sub salvatesto
testo.initzializze (file.output.ecc........) poi sul button_click salvatesto. cosi?
Non esattamente così e non lo consiglio a te, ma a chiunque, ME COMPRESO :D.
E' un consiglio generale in programmazione, consiglio che tutti noi probabilmente fatichiamo a seguire: tenere separato il codice dall'interfaccia grafica (e magari i dati dal codice :D).

Le routine evento (quelle tipo xxx_Cllick, xxx_Touch, etc) dovrebbero contenere solo chiamate ad altre routine (meglio ancora queste routine dovrebbero stare anche in moduli diversi).

Ad esempio:
B4X:
Sub btnSalva_Click
   Salva
End Sub


Sub Salva
'...
End Sub
In questo modo, la routine Salva potrà essere chiamata anche da altri punti del codice. Questo esempio non è l'ideale per capire il motivo, perché Salva non ha parameteri.

Facciamo il caso di una routine che riceve coordinate X, Y dello schermo per disegnarci qualcosa. Se scrivi la routine che Disegna(X, Y, qualcosa) puoi poi chiamarla sia da un evento come Panel1_Touch(Action As Int, X As Float, Y As Float) sia da un Button1_Click, se ad esempio nella Button1_Click aumenti la posizione X che è una variabile a livello di modulo.

Se poi la routine Disegna fosse:

Sub Disegna(Dove As Object, X As Int, Y As Int, Bmp As Bitmap)

potresti metterla in un modulo separato e chiamarla da tutti gli altri moduli, usando parametri diversi e, ad esempio, chiamata da eventi legati a View diverse (quindi Disegna sarebbe codice separato da "View_Touch" o "View_Click"...)

Insomma, tutta sta pappardella per dire che tenere il codice separato dall'interfaccia grafica è una buona abitudine ed è utile in molti casi (modifiche, manutenzione, ...)
 

Antonio67

Member
Gentilissimo, appena posso ti invio il codice, anche se la mia intenzione era quella di creare un semplice editor di testo tipo blocco note, wuord, ecc. per scrivere,salvare,e cancellare dati da ricordare.:)
 

LucaMs

Expert
Licensed User
Ma per tuo uso personale? Se è così, probabilmente Google Play è stracolmo di app così.

Se invece ti serve da "allenamento" con B4A... :)
 

Antonio67

Member
No no per allenamento, sul play ce ne sono a migliaia. Anche se per programmare ci vuole tanta e tanta fantasia, non fai in tempo a pensare un app che gia ce sullo store:p
 

LucaMs

Expert
Licensed User
Allego una provetta; scritta in poco tempo, provata... ancora meno :D

quindi è probabile che sia piena di difetti... al limite ti diverti a correggerli :)
 

Attachments

Top