2016-04-25 13 views
0

Ich habe ein Problem mit der EditText.Android EditText setText Ursache Softkeyboard zum Einfrieren

Ich habe ein TextWatcher umgesetzt und überprüfe ich jedes Mal in afterTextChanged einige spezifische Keywords in einem AsyncTask zu markieren, und stellen Sie den Text in onPostExcute (ich nur die UI hier berühren), aber die Soft-Tastatur einfrieren, wenn setText wurde in onPostExcute genannt (Die App ist nicht eingefroren).

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

Das Highlight Code hier

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

einfach das Ergebnis zurück direkt genrated und gelten et.settext() innerhalb Aktivität Umfang nur – Haroon

+0

@Haroon Sie bedeuten nicht, es in OnPostExecute zu setzen? Ich werde versuchen, – BennyKok

+0

@Haroon, wenn ich nicht async Aufgabe verwenden, die UI Freeze – BennyKok

Antwort

2

Sie haben die Logik der Beendigung der afterTextChange() -Methode von TextWatcher wie, wenn der Text afterTextChange ändern() bekam schreiben wird und jedes Mal afterTextChange aufgerufen wird () ruft Sie an, markieren Sie einige spezifische Schlüsselwörter in einer AsyncTask und erneut in onPostExecute() wird aufgerufen und es wird wieder Text() gesetzt. Also müssen Sie den Weg finden, die afterTextChange() Logik zu beenden. Für bessere Hilfe bitte auch den TextWatcher-Code eingeben.

1

Dies ist der Grund, dass, sobald Sie Text in onpostexecute setzen, Textwechsel Ereignis erneut ausgelöst und es geht wieder in async-Task daher geht es in eine Endlosschleife. Sie sollten einen boolean verwenden zu verfolgen, ob das Ereignis von OnPostExecute oder durch Tastatureingabe

Verwandte Themen