Android:EditText TextChangedListener上的堆栈溢出错误

时间:2012-06-27 11:44:31

标签: android android-edittext stack-overflow

我得到运行此特定代码的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 个答案:

答案 0 :(得分:3)

如果您在同一个TextView的{​​{1}}内设置了TextView的文字,那么您已经设置了一个无限循环,这会导致{TextWatcher 1}}。

答案 1 :(得分: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("");
            }
        }

    }); 

答案 2 :(得分: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内容的更改(通过您的代码)。

答案 3 :(得分:0)

你在onTextChanged监听器中调用settext方法。这会导致监听器一次又一次地触发onTextChanged方法。这导致stackOverflow错误