要从文本中删除空格,我已编写下面的代码。我的要求是删除文本之间的空白,同时从同一EditText复制粘贴文本(键入“text”副本并将其粘贴到相同的EditText.the文本应该是“texttext”,但实际上它就像“文本文本”一样。但问题是当我将textChangedListener添加到 Edittext 时崩溃了。
textForm.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
String str = textForm.getText().toString().replace(" ", "");
textForm.setText(str);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
logcat错误在下面给出
04-24 14:55:12.660: E/AndroidRuntime(20780): java.lang.StackOverflowError
04-24 14:55:12.660: E/AndroidRuntime(20780): at android.text.TextUtils.getChars(TextUtils.java:60)
答案 0 :(得分:2)
这是因为您在onTextChanged中执行setText()。因此,当您更改文本onTextChanged将被调用并再次在onTextChanged内调用setText()。所以thr文本再次更改,onTextChanged()将再次被调用,此过程将继续,直到堆栈溢出并导致stackOverFlow错误。希望你能理解......
用户在setText()之前删除了TextChangedListener()。
查看此帖子以获取完整解决方案: https://stackoverflow.com/a/8600921/912851
答案 1 :(得分:1)
您已设法创建无限循环:)
您更改了文本,这会导致您调用onTextChanged侦听器,您可以在其中更改文本,这会导致您在更改文本时调用onTextChanged侦听器.....
试试这个
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
if (textForm.getText().toString().contains(" ")){
String str = textForm.getText().toString().replace(" ", "");
textForm.setText(str);
}
}
或者这个
@Override
public void afterTextChanged(Editable s) {
String replacedText = s.toString().replaceAll(" ", "");
if (!replacedText.equals(s.toString())) {
textForm.setText(replacedText);
}
}
可能有更优雅的方法来做到这一点并且两次获取textview文本效率很低,但是你明白了......