2

运行此特定代码时出现 StackOverflow 错误:

litera.addTextChangedListener(new TextWatcher(){
            public void afterTextChanged(Editable s) {}
            public void beforeTextChanged(CharSequence s, int start, int count, int after){}
            public void onTextChanged(CharSequence s, int start, int before, int count){
                String ghici = litera.getText().toString();
                System.out.println(ghici);
                litera.setText("");
            }

        }); 

我一次评论每一行,我发现罪魁祸首是 litera.setText(""); 线,其他工作正常。我以前用过它,它让我感到困惑为什么一个特别简单的指令会导致如此严重的错误......其余的错误消息是关于“android.view.ViewGroup.addFocusables(ViewGroup.java:637)”和其他的,但我怀疑它们是决定性的。

我错过了什么?

4

4 回答 4

3

如果您TextView从同一个TextView's中设置 's 文本TextWatcher,那么您已经设置了一个无限循环,这会导致StackOverflowException.

于 2012-06-27T11:54:20.863 回答
2

你必须用这种方式

 litera.addTextChangedListener(new TextWatcher(){
        public void afterTextChanged(Editable s) {}
        public void beforeTextChanged(CharSequence s, int start, int count, int after){}
        public void onTextChanged(CharSequence s, int start, int before, int count){
            String strEnteredVal = litera.getText().toString();
            if(!strEnteredVal.equals("")){
            System.out.println(strEnteredVal);
            litera.setText("");
            }
        }

    }); 
于 2012-06-27T12:01:13.473 回答
0

您遇到此问题是因为您正在更改 onChange 侦听器中的文本。发生的情况是用户更改了文本,这会调用您的onTextChange方法,这反过来会更改文本并再次调用onTextChange侦听器 - 等等。如果您需要更改侦听器的文本,那么您需要以某种方式忽略代码中的文本更改,只处理来自用户的文本更改。例如,您可以尝试这样的事情:

litera.addTextChangedListener(new TextWatcher(){
        public void afterTextChanged(Editable s) {}
        public void beforeTextChanged(CharSequence s, int start, int count, int after){}
        public void onTextChanged(CharSequence s, int start, int before, int count){
            if(count > 0) {
                String ghici = litera.getText().toString();
                System.out.println(ghici);
                litera.setText("");
            }
        }
    });

这将忽略所有已删除 edittext 内容的更改(通过您的代码)。

于 2012-06-27T11:55:29.940 回答
0

您正在 onTextChanged 侦听器中调用 settext 方法。这将导致侦听器一次又一次地触发 onTextChanged 方法。这导致stackOverflow错误

于 2012-06-27T11:55:53.763 回答