Shawn Lauzon
Shawn Lauzon

Reputation: 6282

Can't insert into Editable

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?

Upvotes: 13

Views: 3736

Answers (4)

Arun PK
Arun PK

Reputation: 119

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...

Upvotes: 4

BeccaP
BeccaP

Reputation: 1462

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
}

Upvotes: 14

Shawn Lauzon
Shawn Lauzon

Reputation: 6282

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

Upvotes: 33

kohlehydrat
kohlehydrat

Reputation: 505

Try:

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

Upvotes: 1

Related Questions