2010-10-03 12 views
3

Dans mon application, j'ai une activité pour ajouter/supprimer/modifier des enregistrements à l'intérieur d'un SortedMap. L'activité est implémentée comme une extension de ListActivity. J'ai implémenté ArrayAdapter personnalisé pour les éléments de collection.Comment gérer correctement l'entrée Android EditText dans un ListView?

Chaque élément ListView (ce qui correspond à un enregistrement sous-jacent) se compose de TextView s, EditText s, et un Button pour supprimer l'enregistrement lui-même. La mise en page est à peu près comme suit:

ListView 
---------------------------------------------------- 
[TextView] [EditText] [TextView] [EditText] [Button] 
---------------------------------------------------- 
[TextView] [EditText] [TextView] [EditText] [Button] 

Mon but est de traiter l'entrée d'un utilisateur tape au EditText s dès que l'utilisateur terminé l'édition, à savoir lorsque l'utilisateur a naviguer loin de la EditText ou l'utilisateur a pressé de rejeter le clavier à l'écran.

J'ai essayé d'implémenter ceci en traitant onFocusChanged, pour traiter le texte visible dans le EditText. Cependant cette méthode ne fonctionne pas bien, la méthode onFocusChanged est appelée très souvent et de manière aléatoire, même pour & non sélectionné EditText s. Ceci est probablement dû à this article on Android Blog à partir de ce StackOverflow question.

Y a-t-il une meilleure façon de procéder?

Répondre

2

TextView, qui s'étend de EditText, inclut la méthode public void addTextChangedListener (TextWatcher watcher) qui peut vous être utile.

Je ne l'avais pas utilisé auparavant, mais il semble que ce serait appelé chaque fois que l'utilisateur éditerait TextView et que vous pourriez le traiter chaque fois qu'il change. Cela peut causer beaucoup de surcharge s'il est appelé à chaque fois qu'un utilisateur supprime ou ajoute un caractère, mais cela peut être la solution la plus simple.

+0

essayé, grande mise en garde est que vous ne pouvez pas faire la différence entre les « changements » artificiels causés par le listview et de véritables changements par l'utilisateur. La vérification du nombre ne fonctionnera pas, car l'utilisateur pourrait supprimer toute la ligne avec tout sélectionner. –