在android中使用textwatcher拆分edittext行

时间:2014-03-21 09:51:27

标签: android android-edittext textwatcher

我有一个布局,我已动态创建。它有一个多行的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的名称。

1 个答案:

答案 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);
    }
};