[英]Android: Call function if EditText has not been changed in x seconds
我正在使用此应用程序,每当EditText中的文本更改时,该应用程序都会将请求发送到服务器。 它可以正常工作。
问题是,如果每次edittext更改时我发送一个请求,最终都会有很多请求。 而且我不想使用“发送”按钮。
我想要一些像这样的作品:
如果用户键入edittext,则计时器将继续运行。 并且如果计时器达到x秒,它将执行请求。 但是如果用户再次键入,计时器将重置。
这样,仅在用户停止键入后才发送请求。
您可能知道更好的方法,我很高兴听到它。
提前致谢
一种方法是使用myEditText.addTextChangedListener(...)
并使用TextWatcher
知道文本何时更改。
然后,在onTextChanged()
方法中,您可以使用Handler
发布延迟运行的消息,以将当前文本发送到您的服务器(如果他们没有进一步输入任何内容)。
这大致是这样的:
private Handler handler = new Handler();
private Runnable postToServerRunnable = new Runnable() {
@Override
public void run() {
// TODO: PUT CODE HERE TO HANDLE CURRENT VALUE OF EDIT TEXT AND SEND TO SERVER
}
};
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// remove existing callback (timer reset)
handler.removeCallbacks(postToServerRunnable);
// 500 millisecond delay. Change to whatever delay you want.
handler.postDelayed(postToServerRunnable, 500);
}
};
这就是称为EditText.edittext.addtextchangedlistener
方法。 将此侦听器添加到您的edittext中,并覆盖此类方法。
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
called after the The complete Text is changed// this is what i think you should use
}
我希望这是有帮助的 。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.