Android EditText setText导致软键盘冻结

时间:2016-04-25 10:55:02

标签: android android-edittext android-softkeyboard

我遇到了EditText的问题。

我已经实施了TextWatcher,我每次都会在afterTextChanged中进行检查,以突出AsyncTask中的某些特定关键字并在onPostExcute中设置文字(我只触及这里的UI),但在setText中调用onPostExcute时软键盘冻结(应用程序没有冻结)。

public class AsyncHighLight extends AsyncTask<String,String,String>
{
    @Override
    protected String doInBackground(String[] p1){
        return SyntaxHighlighter.getInstance(MainActivity.this).highlight(p1[0]);
    }

    @Override
    protected void onPostExecute(String result){
        et.setText(Html.fromHtml(result));
    }
}

此处的精彩代码

public String highlight(String s){
    String newString = s;
    newString = newString.replace("\n","<br>");
    for (int i = 0 ; i < currentLang.keyword.length ; i ++){
        newString = newString.replace(currentLang.keyword[i],warpColorTag(currentLang.keyword[i]));
    }
    return newString;
}

2 个答案:

答案 0 :(得分:2)

你必须编写终止textWatcher的afterTextChange()方法的逻辑,因为每当文本发生变化时,将调用afterTextChange()并且每次调用afterTextChange()后,你都会在AsyncTask中突出显示一些特定的关键字,并再次在onPostExecute中()将被调用,它将再次setText()。所以你必须找到终止afterTextChange()逻辑的方法。如需更好的帮助,请发布TextWatcher代码。

答案 1 :(得分:1)

这是因为只要你在onpostexecute中设置文本,textchange事件就会再次触发并再次进入异步任务,因此它会进入无限循环。 您应该使用布尔值来跟踪事件是通过onpostexecute还是通过键盘输入生成的