Home » Android » android – Can't insert into Editable

android – Can't insert into Editable

Posted by: admin May 14, 2020 Leave a comment

Questions:

I must be doing something obvious, but I can’t figure out what it is. I’m simply trying to insert a character into an Editable:

@Override
public void afterTextChanged(Editable s) {
    Log.d(TAG, "inserting space at " + location);
    s.insert(location, " ");
    Log.d(TAG, "new word: '" + s + "'");
}

But s never changes. The string ‘s’ is long enough, because I print it and it looks good. If I call Editable.clear(), it is cleared, and I can replace multiple characters with Editable.replace(). Ideas?

How to&Answers:

I found the problem; I set the inputType as “number” and so adding the space silently failed.

Answer:

To edit an editable with input filters, simply save the current filters, clear them, edit your text, and then restore the filters.

Here is some sample code that worked for me:

@Override
public void afterTextChanged(Editable s) {
    InputFilter[] filters = s.getFilters(); // save filters
    s.setFilters(new InputFilter[] {});     // clear filters
    s.insert(location, " ");                // edit text
    s.setFilters(filters);                  // restore filters
}

Answer:

My situation was, I want to insert a ‘-‘ at third place while typing the zip-code. (Eg. 100-0001). No other character not allowed to enter. I set my EditText in xml,

<EditText
 android:id="@+id/etPostalCode"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:imeOptions="actionDone"
 android:inputType="number"
 android:digits="0,1,2,3,4,5,6,7,8,9,-"
 android:singleLine="true"
 android:maxLength="8"/>

And in my code i add text change listener

etPostalCode.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            if (!s.toString().contains("-") && s.length() > 3) {
                s.insert(3, "-");
            }
        }
    });

By this way i solved my problem… Please suggest me other ways if there another better options available…

Answer:

Try:

Editable s = getLatestEditable();
Log.d(TAG, "inserting space at " + location);
s.insert(location, " ");
Log.d(TAG, "new word: '" + s + "'");