Android EditText setText导致软键盘冻结
问题描述:
我遇到了问题EditText
。Android EditText setText导致软键盘冻结
我实现了一个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;
}
答
你必须写终止afterTextChange(逻辑)TextWatcher的方法,每当文本得到了改变afterTextChange()将被调用,每afterTextChange时间( )被调用时,突出显示AsyncTask中的一些特定关键字,并再次在onPostExecute()中调用,并且它将再次设置为Text()。所以你必须找到终止afterTextChange()逻辑的方式。为了更好的帮助,请发布TextWatcher代码。
答
这是由于这样的原因,只要你在onpostexecute中设置文本,textchange事件再次触发,并再次进入异步任务,因此它进入一个无限循环。 您应该使用一个布尔追查事件是否从onpostexecute或键盘输入genrated
就直接返回结果和应用内的活动范围仅 – Haroon
@Haroon您的意思是不是设置它onPostExecute et.settext()?我会尝试 – BennyKok
@哈龙如果我不使用异步任务,ui冻结 – BennyKok