所以我有點困惑。我使用TextWatcher afterTextChanged(可編輯)方法來搜索用戶輸入的文本,並檢測他是否鍵入了列表中的一個單詞,如果是,則將一個跨度添加到該位置。自定義EditText中的AsyncTask
當我試圖直接在afterTextChanged中實現它時,隨着文本越來越難以搜索並跨越特定單詞,所以我將工作移到了AsynkTask類中。這裏是類:
class SearchText extends AsyncTask<String, String, Void> {
private String match = "(\\d)?(([\\p{Alnum}\\p{Punct}])+?) ([0-9]+?)\\b:([0-9]+?)(, ([0-9]+?))?(-([0-9]+?))?\\b";
private Editable s;
SearchText(Editable s) {
this.s = s;
}
@Override
protected Void doInBackground(String... params) {
Matcher m = Pattern.compile(match).matcher(s);
while (m.find()) {
Reference reference = new Reference(m.group(9));
if (booksList.contains(m.group(2)) && mListener.check(reference)) {
BooksSpan booksSpan = new BooksSpan("1");
try {
s.setSpan(booksSpan, m.start(), m.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} catch (Exception e) {
Log.e("error", e.getMessage());
}
}
}
return null;
}
}
當我輸入真快s.setSpan(booksSpan, m.start(), m.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
,就像是隨機的話,它給了我:
Only the original thread that created a view hierarchy can touch its views.
這是爲什麼只是有時候?可編輯不是一個視圖。我錯過了什麼?
我不知道爲什麼這種情況只發生在有時。但是當使用AsyncTask時,你應該使用'onPostExecute()'來操作UI。 – AlbAtNf
可編輯用戶界面如何? –
顯示完整的堆棧跟蹤。 –