我是java和android开发的新手,我正在开发一个通过EditText从用户那里获取输入的应用程序。但是,有时输入数据的某些字符的编码与应用程序所期望的不同。
我创建了一个包含所有可能映射(大约460个元素)的hashmap,每当用户输入(或粘贴)某些东西时,我都会使用afterTextChanged方法来浏览文本,并将与错误编码匹配的文本交换为正确显示正确的。 我的代码适用于小型条目,但是它越慢就越慢,因为afterTextChanged将在每次交换后以递归方式调用。当粘贴具有不正确编码的大约30个字符的文本时,应用程序将崩溃。
这是我的代码:
public void afterTextChanged(Editable editable) {
substituteText(editable);
}
public CharSequence substituteText(Editable txt) {
if (txt.length() == 0) {
return txt;
}
for (int i = 0; i < txt.length(); i++) {
char ch = txt.charAt(i);
CharSequence ret = myHashMap.get(ch);
if (ret != null) {
txt.replace(i, i + 1, ret);
}
}
return txt;
}
我想到克隆“可编辑”给某些人,更改它然后将其复制回edittext可编辑变量,所以它只会看到它作为一个更改,但我没有做到这一点,因为我找不到一个简单的方法克隆它。
有更有效的方法吗?
答案 0 :(得分:1)
如果你使用onTextChanged而不是afterTextChanged,你将会传递用户键入的新角色以及它们的位置,你只需要检查它们。