2011-11-08 9 views
11

Sto utilizzando Android AutoCompleteTextView con un CursorAdapter per aggiungere il completamento automatico a un'app. Nella vista onItemClickListener() (ad esempio quando l'utente tocca uno degli elementi a discesa con completamento automatico) recupero il testo e lo inserisco nell'EditText in modo che l'utente possa modificarlo se necessario.Disattiva Android AutoCompleteTextView dopo che l'utente seleziona l'elemento dal menu a discesa

Tuttavia, quando chiamo setText() sul TextView il comportamento del completamento automatico viene attivato e il menu a discesa viene nuovamente visualizzato. Mi piacerebbe solo mostrare il menu a discesa se l'utente digita il nuovo testo con la tastiera. C'è un modo per fare questo?

+0

sto facendo qualcosa di simile QUI !!! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

risposta

2

Rispondere alla mia domanda dopo un paio d'ore di hacking in questo: Si scopre che è necessario implementare il proprio OnItemClickListener e invece fare affidamento sul listener di clic esistente per compilare il TextView. Inizialmente avevo implementato onItemClickListener perché utilizzava i risultati di Cursor.toString() per popolare la visualizzazione del testo. Per modificare la stringa di output, è necessario implementare convertToString(Cursor) nel CursorAdapter. Il CharSequence che viene restituito verrà popolato nella visualizzazione del testo.

In questo modo si eviterà anche che il menu a discesa venga nuovamente visualizzato (poiché setText() attiva il comportamento di completamento ma non l'impostazione predefinita su ItemClickListener).

13

È possibile utilizzare il metodo dismissDropDown() dell'oggetto AutoCompleteTextView. Dai uno sguardo allo documentation.

+0

Voglio impedire che il menu a discesa venga visualizzato finché non vengono digitate nuove chiavi. Se uso dismissDropDown() il menu a discesa verrà mostrato brevemente prima di essere eliminato. – magneticMonster

+0

Se si inserisce la chiamata al metodo in onItemClickListener(), è necessario chiudere l'elenco quando si fa clic su un elemento. Non è questo quello che vuoi? –

6

Se si desidera dissociare il menu a discesa di AutoCompleteTextView, è necessario utilizzare il relativo metodo Post (Runnable r). Funziona per me :)

Ecco un esempio:

mAutoCompleteTextView.post(new Runnable() { 
    public void run() { 
     mAutoCompleteTextView.dismissDropDown(); 
    } 
} 
+0

Ho anche aggiunto lo stesso snippet in onConfigurationChanged nella mia attività –

Problemi correlati