2016-04-25 97 views
0

我遇到了问题EditTextAndroid 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; 
} 
+0

就直接返回结果和应用内的活动范围仅 – Haroon

+0

@Haroon您的意思是不是设置它onPostExecute et.settext()?我会尝试 – BennyKok

+0

@哈龙如果我不使用异步任务,ui冻结 – BennyKok

回答

2

你必须写终止afterTextChange(逻辑)TextWatcher的方法,每当文本得到了改变afterTextChange()将被调用,每afterTextChange时间( )被调用时,突出显示AsyncTask中的一些特定关键字,并再次在onPostExecute()中调用,并且它将再次设置为Text()。所以你必须找到终止afterTextChange()逻辑的方式。为了更好的帮助,请发布TextWatcher代码。

1

这是由于这样的原因,只要你在onpostexecute中设置文本,textchange事件再次触发,并再次进入异步任务,因此它进入一个无限循环。 您应该使用一个布尔追查事件是否从onpostexecute或键盘输入genrated