在我的应用程序中,用户可以在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