我遇到了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;
}
答案 0 :(得分:2)
你必须编写终止textWatcher的afterTextChange()方法的逻辑,因为每当文本发生变化时,将调用afterTextChange()并且每次调用afterTextChange()后,你都会在AsyncTask中突出显示一些特定的关键字,并再次在onPostExecute中()将被调用,它将再次setText()。所以你必须找到终止afterTextChange()逻辑的方法。如需更好的帮助,请发布TextWatcher代码。
答案 1 :(得分:1)
这是因为只要你在onpostexecute中设置文本,textchange事件就会再次触发并再次进入异步任务,因此它会进入无限循环。 您应该使用布尔值来跟踪事件是通过onpostexecute还是通过键盘输入生成的