无法插入可编辑

发布于 2024-10-16 09:56:13 字数 363 浏览 2 评论 0原文

我一定在做一些显而易见的事情,但我不知道它是什么。我只是想将一个字符插入可编辑的:

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

但 s 永远不会改变。字符串 's' 足够长,因为我打印它并且看起来不错。如果我调用 Editable.clear(),它会被清除,并且我可以使用 Editable.replace() 替换多个字符。有想法吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

做个少女永远怀春 2024-10-23 09:56:13

我发现了问题;我将 inputType 设置为“number”,因此静默添加空格失败。

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

じ违心 2024-10-23 09:56:13

要使用输入过滤器编辑可编辑内容,只需保存当前过滤器,清除它们,编辑文本,然后恢复过滤器即可。

这是一些对我有用的示例代码:

@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
}

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
}
清音悠歌 2024-10-23 09:56:13

我的情况是,我想在输入邮政编码时在第三位插入“-”。 (例如 100-0001)。没有其他字符不允许进入。我在 xml 中设置了 EditText,

<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"/>

并在代码中添加了文本更改侦听器

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, "-");
            }
        }
    });

通过这种方式我解决了我的问题...如果有其他更好的选项可用,请建议我其他方法...

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

絕版丫頭 2024-10-23 09:56:13

尝试:

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

Try:

Editable s = getLatestEditable();
Log.d(TAG, "inserting space at " + location);
s.insert(location, " ");
Log.d(TAG, "new word: '" + s + "'");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文