Detect changes in EditText (TextWatcher ineffective)
I need to detect text changes in an EditText. I've tried TextWatcher, but it doesn't work in a way I would expect it to. Take the onTextChanged method:

`public void onTextChanged( CharSequence s, int start, int before, int count )`

Say I have the text "John" in already in the EditText. If press another key, "e", `s` will be "Johne", `start` will be 0, `before` will be 4, and `count` will be 5. The way I would expect this method to work would be the difference between what the EditText previously was, and what it's about to become.

So I would expect:

    s = "Johne"
    start = 4 // inserting character at index = 4
    before = 0 // adding a character, so there was nothing there before
    count = 1 // inserting one character

I need to be able to detect individual changes every time a key is pressed. So if I have text "John", I need to know "e" was added at index 4. If I backspace "e", I need to know "e" was removed from index 4. If I put the cursor after "J" and backspace, I need to know "J" was removed from index 0. If I put a "G" where "J" was, I want to know "G" replaced "J" at index 0.

How can I achieve this? I can't think of a reliable way to do this.
Detect changes in EditText (TextWatcher ineffective)
===

I need to detect text changes in an EditText. I've tried TextWatcher, but it doesn't work in a way I would expect it to. Take the onTextChanged method:

`public void onTextChanged( CharSequence s, int start, int before, int count )`

Say I have the text "John" in already in the EditText. If press another key, "e", `s` will be "Johne", `start` will be 0, `before` will be 4, and `count` will be 5. The way I would expect this method to work would be the difference between what the EditText previously was, and what it's about to become.

So I would expect:

    s = "Johne"
    start = 4 // inserting character at index = 4
    before = 0 // adding a character, so there was nothing there before
    count = 1 // inserting one character

I need to be able to detect individual changes every time a key is pressed. So if I have text "John", I need to know "e" was added at index 4. If I backspace "e", I need to know "e" was removed from index 4. If I put the cursor after "J" and backspace, I need to know "J" was removed from index 0. If I put a "G" where "J" was, I want to know "G" replaced "J" at index 0.

How can I achieve this? I can't think of a reliable way to do this.