2015-09-28 102 views
0

在我的应用程序中,用户可以在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) { 
     } 
    }; 
+1

'“如何检测TextWatcher Android中当前光标位置的变化?”'使用'SpanWatcher' – pskink

+0

@pskink如何将'SpanWatcher'附加到'AutoComplete'? –

+1

“当此类型的对象附加到** Spannable **时,将调用其方法来通知其他标记对象已添加,更改或删除。”你不附加到'自动完成',而是附加到'Spannable'文本 – pskink

回答

0

TextWatcher用来放哨上的EditText内容,而用户输入的数据。它允许您在EditText上输入每个字符时跟踪。 follow this example code

+0

是的,这就是我所做的。问题在于我也想跟踪文本中间的变化,而不仅仅是结尾。 –

+1

@kodw'SpanWatcher'使用它 – pskink

相关问题