Italian autocompilazione di un campo text

ivanomonti

Expert
Licensed User
Longtime User
Ciao ragazzi e auguri per domani (carbone o caramelle) hahahah arriva la befana...

veniamo a noi, sto realizzando un carrello della spesa, ma avendo milioni di voci vorrei che fosse veloce a compilare proponendo la voce di una possibile lista... qui ho il problema di come fare la cosa...

come posso fare che metre uno scrive viene proposto una serie di voci da elenco!!!

Mi date un suggerimento

Esempio scrivo zu e vorrei che venisse un menu che mi indicasse zucca,zucchine,...

spero di essermi spiegato... dimenticavo i dati vengono letti da un foglio di testo.txt
 
Last edited:

arenaluigi

Well-Known Member
Licensed User
Longtime User
Ciao Ivano,
devi usare la view AutoCompleteEditText che ha le seguenti proprietà:

SetItems (Items As List)
Consente di impostare l'elenco delle voci possibili.

In pratica quando l'utente digita 3 caratteri fai una query usando l'operatore like ti estrai le prime 100 parole e le salvi nella lista, poi man mano che digita i caratteri rifai la query la risalvi nella lista e così via....

Se vuoi mostrare l'elenco ricordati di impostare la proprietà ShowDropDown.

Spero ti sia utile.
 

ivanomonti

Expert
Licensed User
Longtime User
Ciao Ivano,
devi usare la view AutoCompleteEditText che ha le seguenti proprietà:

SetItems (Items As List)
Consente di impostare l'elenco delle voci possibili.

In pratica quando l'utente digita 3 caratteri fai una query usando l'operatore like ti estrai le prime 100 parole e le salvi nella lista, poi man mano che digita i caratteri rifai la query la risalvi nella lista e così via....

Se vuoi mostrare l'elenco ricordati di impostare la proprietà ShowDropDown.

Spero ti sia utile.

grazie infatti ho usato questo object

B4X:
Sub autocomplete
   Dim TextReader1 As TextReader
   Dim line As String
   If File.Exists(File.DirRootExternal&"/folder", "file.txt") = True Then
       TextReader1.Initialize(File.OpenInput(File.DirRootExternal&"/folder", "file.txt"))
       Dim line As String
      line = TextReader1.ReadLine
      xProduction.Initialize
      xCategory.Initialize
      Do While line <> Null
         Dim value() As String
         Dim s As String
         s = line
         value=Regex.Split(",",s)
         If value.Length > 0 Then xProduction.Add(value(0))
         If value.Length > 1 Then xCategory.Add(value(1))
         line = TextReader1.ReadLine
       Loop
       TextReader1.close
   End If
End Sub

B4X:
Sub EditText_production_ItemClick(Value As String)
   ToastMessageShow("You clicked " & Value,False)
   EditText_category.Text = xCategory.Get(xProduction.IndexOf(Value))
   EditText_note.Text = "Nessuna nota"
End Sub
 

ivanomonti

Expert
Licensed User
Longtime User
Ho risolto il mistero in quanto list veniva popolato da un parse json e pertanto non formattata in modo corretto, per risolvere ho aggiunto quanto segue

B4X:
Log(DataLog.listReparti)
   
   map1.Initialize
   
   For i = 0 To DataLog.listReparti.Size-1
      Dim m As Map
      m.Initialize
      m = DataLog.listReparti.Get(i)
      map1.Add(m.Get("a02"))
   Next
   
   Log(map1)
   
   AutoCompleteEditText1.SetItems(map1)
   AutoCompleteEditText1.ShowDropDown
 
Last edited:

adalexander

Member
Licensed User
Longtime User
Ciao Ivano,
devi usare la view AutoCompleteEditText che ha le seguenti proprietà:

SetItems (Items As List)
Consente di impostare l'elenco delle voci possibili.

In pratica quando l'utente digita 3 caratteri fai una query usando l'operatore like ti estrai le prime 100 parole e le salvi nella lista, poi man mano che digita i caratteri rifai la query la risalvi nella lista e così via....

Se vuoi mostrare l'elenco ricordati di impostare la proprietà ShowDropDown.

Spero ti sia utile.
ciao luigi, una domanda questo argomento interessa anche me, una volta resa operativa questa funzione se io volessi ad esempio cliccare s un nome o su un albergo e far che cliccando mi apra una pagina appositamente creata con tutte le descrizioni, come dovrei fare, perchè come funzione è utile ma così non ci faccio nulla, mi da solo un aiuto per trovare una parola o altro, ma secondo me dovrebbe anche aprire una finestra o un pannello che mi dia i suggerimenti visuali per quella parola, non so se mi sono spiegato, grazie
 

spagoo

Member
Buongiorno a tutti, questo è il mio primo post.
Mi riallaccio a questi post anche se già vecchi di un anno perchè sono quelli che trattano l'argomento più vicino a quello che vi chiedo (premetto che non sono un programmatore, ma che mi diletto)

Sto cercando di collegare un AutoCompleteEditText ad un database SQLite (ma potrebbe andar bene qualsiasi altro)
L'idea è cercare un dato tramite AutoCompleteEditText in un campo (es NomeCittà) di una tabella del database e poi estrarre un altro campo (es. NumeroAbitanti) ed inserirlo in una Label.
Ho trovato solo come farlo con dei file txt dove ho praticamente solo un campo.
Magari c'è la possibilità di estrarre solo una porzione di testo (es. da carattere 20 a carattere 40) potrebbe andar bene anche cosi --> in pratica i miei campi di database sono i caratteri 0-19, 20-39, 40-59, ecc.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Ciao.

Premetto che non ho mai usato l'AutoCompleteEditText, che quindi non conosco, perciò quanto sto per scrivere potresti forse usarlo anche con quella.

Il db, in Android, deve per forza essere SQLite. Puoi farlo creare dalla app stessa, nel codice, oppure usare qualche tool esterno (io utilizzo SQLite Database Browswer, che a dispetto del nome, consente anche la creazione, altri preferiscono SQLite Expert).

Aggiungi alla tua app il modulo DBUtils che trovi qui nel sito, che ti aiuta; ad esempio, dopo che hai creato il db esternamente, lo metti nella Tab Files dell'IDE e poi usi il comando di DBUtils per copiarlo da lì alla cartella di lavoro (passo necessario perché altrimenti il db sarebbe in sola lettura, in questo caso).

Infine, per l'autocomplete, sfrutti l'evento Change della EditText in questione, nella quale richiami una query (megliio se metti tutte le operazioni da eseguire sul DB in un modulo separato, per la pulizia del progetto, non per altro) fatta più o meno in questo modo:

"SELECT NumeroAbitanti FROM TuaTabella WHERE NomeCitta LIKE '" & New & "%'"

in cui New è il nuovo testo inserito dall'utente nela EditText, mentre lo digita.

Dopo che ho scritto tutta questa pappardella... lo provo anch'io :)


[EDIT]

Ho adattato e allegato il progetto di esempio SearchView di Erel per utilizzarlo con un DB.
 

Attachments

  • lm_SearchViewDB.zip
    15.1 KB · Views: 311
Last edited:

spagoo

Member
Grazie mille per la risposta molto rapida
ora provo... spero di ottenere qualcosa.
faccio una prova e poi ti faccio sapere
 

spagoo

Member
Stavo cercando di crearlo io ma tu sei stato rapidissimo
è proprio quello che cercavo
Grazie mille LucaMs :)
 

spagoo

Member
Io per arrivare a tanto avrei avuto bisogno di almeno un giorno di smanettamenti e incazzature varie (questo ovviamente dopo il tuo primo consiglio).
Oltretutto spero che lo schema servi anche ad altri.
Sei un GRANDE!!!
 

maxware

Well-Known Member
Licensed User
Longtime User
Ciao Spagoo
Aggiungo , magari lo sai gia' , che la sintassi
WHERE NomeCitta LIKE '" & New & "%
cerca nel campo NomeCitta' tutto quello che contiene,inizia.finisce per il testo di ricerca New
Es. se cerchi UDINE come città ti uscirà ( se nel db ci sono tutte le città ) sia UDINE ma anche PAVIA DI UDINE
se invece vuoi avere solo quello che sta dopo UDINE (oppure inzia per UDINE ) la stringa sql devi modificarla togliendo la prima &
ciaoooo
Mamo
 

maxware

Well-Known Member
Licensed User
Longtime User
Ciao AlpVir
Correggo...Togliendo il % e non il & ( ho preso il tasto sbagliato della tastiera )
Come dicevo dipende da come/cosa vuoi cercare ..pure io userei il % sia in testa che coda per ricercare in testo ovunque
era solo per spiegare la sintassi dell'operatore Like
link a sintassi operatore like
ciaooo
Mamo
 
Top