在我的應用程序中,用戶可以在MultiAutoComplete
中輸入#
,服務器的建議將會在#
之後顯示。例如:如何檢測TextWatcher Android中當前光標位置的變化?
用戶類型#foo
,服務器返回MultiAutoComplete
文本,如#food
#football
。
現在一切正常,如果光標位於文本的末尾。正確的方法是獲取最後一個詞,檢測它是否以#
開頭並將其發送到服務器。當用戶正在編輯文本並將光標設置在中間某處時,問題就開始了。 TextWatcher
只檢測最後一個單詞,因此它看不到更改。
我看到的唯一解決方案是每個字母都保存整個文本,並且每次比較以查看更改。
你知道這個解決方案嗎?
我TextWatcher
看起來是這樣的:
TextWatcher tagsWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String tag = getLastTag(s);
if (tag.length() > 0) {
TagServerService.getTags(tag, city, tagListener);
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
'「如何檢測TextWatcher Android中當前光標位置的變化?」'使用'SpanWatcher' – pskink
@pskink如何將'SpanWatcher'附加到'AutoComplete'? –
「當此類型的對象附加到** Spannable **時,將調用其方法來通知其他標記對象已添加,更改或刪除。」你不附加到'自動完成',而是附加到'Spannable'文本 – pskink