Come gestire correttamente l'input di Android EditText all'interno di un ListView?
Nella mia applicazione ho un'attività per aggiungere / rimuovere / modificare i record all'interno di un SortedMap
. L'attività viene implementata come estensione di ListActivity
. Ho implementato ArrayAdapter
personalizzato per gli elementi di raccolta.
Ogni elemento ListView
(che corrisponde a un record sottostante) consiste di TextView
s, EditText
s e un Button
per eliminare il record stesso. Il layout è approssimativamente come segue:
ListView ---------------------------------------------------- [TextView] [EditText] [TextView] [EditText] [Button] ---------------------------------------------------- [TextView] [EditText] [TextView] [EditText] [Button]
Il mio objective è quello di elaborare l'input di un tipo di utente a EditText
s non appena l'utente ha terminato l'editing, cioè quando l'utente ha navigato lontano da EditText
o che l'utente ha premuto indietro per respingere la tastiera su schermo.
Ho provato a implementarlo gestendo onFocusChanged
, per elaborare il text visibile in EditText
. Tuttavia questo metodo non funziona bene, il metodo onFocusChanged
viene chiamato molto spesso e casualmente, anche per EditText
non selezionato e non modificato. Questo è probabilmente dovuto a questo articolo su Android Blog da questa domanda di StackOverflow .
C'è un modo migliore per farlo?
One Solution collect form web for “Come gestire correttamente l'input di Android EditText all'interno di un ListView?”
TextView
, che estende EditText
, include il metodo public void addTextChangedListener (TextWatcher watcher)
che potrebbe essere utile per te.
Non l'ho mai usato prima, ma sembra che questo venga chiamato each volta che l'utente modifica il TextView
e quindi potresti elaborarlo each volta che cambia. Ciò può causare un sacco di overhead se viene chiamato each volta che un utente elimina o aggiunge un carattere, ma può essere la soluzione più semplice.