Java 控制Android TextWatcher中事件的触发
我不得不用EditText重新创建AutoCompleteTextView的功能(出于不同的原因*&这可能是另一个问题,但我现在正沿着这条路走下去) 每当EditText上的文本发生更改时,我都会发出api调用,从而使我的所有功能正常工作。我通过使用TextWatcher(覆盖afterTextChanged方法)来实现这一点 有没有一种方法可以控制,通过侦听器触发调用的方式 以下是我的用例: 我正在搜索加利福尼亚州 我检查最小长度为3,然后开始触发呼叫。因此,当前发送的API调用数=8Java 控制Android TextWatcher中事件的触发,java,android,event-handling,textwatcher,Java,Android,Event Handling,Textwatcher,我不得不用EditText重新创建AutoCompleteTextView的功能(出于不同的原因*&这可能是另一个问题,但我现在正沿着这条路走下去) 每当EditText上的文本发生更改时,我都会发出api调用,从而使我的所有功能正常工作。我通过使用TextWatcher(覆盖afterTextChanged方法)来实现这一点 有没有一种方法可以控制,通过侦听器触发调用的方式 以下是我的用例: 我正在搜索加利福尼亚州 我检查最小长度为3,然后开始触发呼叫。因此,当前发送的API调用数=8 卡尔
请尝试以下TextWatcher:
TextWatcher t = new TextWatcher() {
long lastChange = 0;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.length() > 3) {
new Handler().postDelayed(new Runnable() {
public void run() {
if (System.currentTimeMillis() - lastChange >= 300) {
//send request
}
}
}, 300);
lastChange = System.currentTimeMillis();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
啊,这看起来真有趣。谢谢Vipul,我将尝试您发布的解决方案,并在运行后将其标记为答案。快速跟进,您发布的代码的处理程序看起来会延迟发出请求(这很好)。是否也有可能取消prev请求?因为if语句“(System.currentTimeMillis()-lastChange>300)”如果用户键入介于两者之间的任何内容,此处理程序将不会执行任何操作。例如:让我们假设在currentTime=1000时,用户键入了一些内容,并保持键入100110021003,因此thr将为4个不同的处理程序进行初始化,lastChange中的值为1003。第一个处理程序将在1300和1300-1003被调用,您可能需要在检查时写入>=。快跑,让我知道。