我有一个布局,我已动态创建。它有一个多行的Edittext,我在edittext上应用了一个文本观察器,这样当用户输入任何文本时,文本行会在每十个字符后被分割。
为此,我创建了一个像这样的文本观察器 -
TextWatcher watcher = new TextWatcher() { // TextWatcher for autosave
// feature
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
StringBuilder s1 = new StringBuilder(s.toString());
for(int i = 10; i < s1.length(); i += 11){
s1.insert(i, "\n");
input.setText(s1.toString());
}
// alert the user
}
};
但应用程序崩溃了,并显示了StackOverFlow Exeption。知道为什么会这么发生吗? 在上面的代码中,&#34;输入&#34;是我的edittext的名称。
答案 0 :(得分:1)
如果输入是您的EditText,那就是发生了什么:
你输入一个字母,调用TextWatcher.afterTextChanged,你在那里更改文本,以便再次调用TextWatcher.afterTextChanged,这种情况会发生直到堆栈结束
TextWatcher watcher = new TextWatcher() { // TextWatcher for autosave
public void afterTextChanged(Editable s) {
input.removeTextChangedListener(this);
StringBuilder s1 = new StringBuilder(s.toString());
for(int i = 10; i < s1.length(); i += 11){
s1.insert(i, "\n");
input.setText(s1.toString());
}
input.addTextChangedListener(this);
}
};