应用程序在尝试替换空格时崩溃

时间:2012-04-24 09:27:48

标签: android android-edittext whitespace textchanged

要从文本中删除空格,我已编写下面的代码。我的要求是删除文本之间的空白,同时从同一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)

2 个答案:

答案 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文本效率很低,但是你明白了......