3

In my application I have an activity to add/remove/edit records inside a SortedMap. The activity is implemented as an extension of ListActivity. I have implemented custom ArrayAdapter for the collection items.

Every ListView item (which corresponds to an underlying record) consists of TextViews, EditTexts, and a Button to delete the record itself. The layout is roughly as follows:

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

My goal is to process the input a user types to the EditTexts as soon as the user finished editing, i.e. when the user has navigate away from the EditText or the user has pressed back to dismiss the onscreen keyboard.

I have tried implementing this by handling onFocusChanged, to process the text visible in the EditText. However this method is not working well, onFocusChanged method is called very often and randomly, even for unselected & unedited EditTexts. This is probably due to this article on Android Blog from this StackOverflow question.

Is there a better way to do this?

Community
  • 1
  • 1
avee
  • 766
  • 1
  • 13
  • 22

1 Answers1

2

TextView, which EditText extends, includes the method public void addTextChangedListener (TextWatcher watcher) that may be useful to you.

I have not used it before but it seems like this would be called anytime the user edits the TextView and then you could process it every time it changes. This may cause a lot of overhead if it is called every time a user deletes or adds a character, but it may be the easiest solution.

Austyn Mahoney
  • 11,398
  • 8
  • 64
  • 85
  • Tried this, major caveat is that you can't tell the difference between the artificial "changes" being caused by the listview and genuine changes by the user. Checking count won't work, because the user could delete the whole line with select all. – Thomas Dignan Nov 01 '11 at 05:34