TextWatcher afterTextChanged导致android中的stackoverflow

Ser*_*gey 5 stack-overflow layout android

我有一个方法drawItems(),每次创建一个新的布局,并将其设置为contentView.而且我还有一个控件EditText,当它的内容被更改时应该删除其他元素.

edit.addTextChangedListener(new TextWatcher() {

                    public void afterTextChanged(Editable s) {
                        currentText = s.toString();
                        drawItems();
                    }

                    public void beforeTextChanged(CharSequence s,
                            int start, int count, int after) {
                    }

                    public void onTextChanged(CharSequence s, int start,
                            int before, int count) {
                    }
                });
Run Code Online (Sandbox Code Playgroud)

我想要做的是保存其当前文本,删除所有的元素,只有离开这个EditTextsaved string.当我尝试运行此应用程序时,引发的错误是StackOverflow,因为它呈现drawItems方法无限次.afterTextChanged即使我不更改其内容,为什么它会渲染drawItems ?它甚至在整个页面加载之前呈现.

zmb*_*mbq 1

正如 @DroidIn.net 在评论中所说,您可能在 afterTextChanged 处理中触发文本更改事件 - 可能在 drawItems() 中。

您可以通过使用处理程序推迟绘制项目的处理来解决堆栈溢出异常,但这可能会让您陷入无限循环。您应该查看drawItems,并确保它们不会更改您的编辑文本,导致更改再次更改编辑文本等等。