我正在使用这个应用程序,只要EditText中的文本发生变化,它就会向服务器发送请求。它的工作原理很好。
问题是,如果我每次编辑文本发生变化时都发送请求,那么最终会有很多请求。而且我不想使用“发送”按钮。
我想要的东西是这样的:
如果用户输入edittext,则会有一些计时器继续运行。如果计时器达到x秒,它将执行请求。但是如果用户再次键入,计时器将重置。
这样,只有在用户停止输入后才会发送请求。
你可能知道一些更好的方法,我很高兴听到它。
提前致谢:D
答案 0 :(得分:3)
一种方法是使用myEditText.addTextChangedListener(...)
并使用TextWatcher
来了解文本何时发生变化。
然后在onTextChanged()
方法中,您可以使用Handler
发布延迟的runnable,如果他们没有进一步输入任何内容,则将当前文本发送到您的服务器。
这大致是这样的:
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);
}
};
答案 1 :(得分:1)
这是一种名为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
}
我希望这会有所帮助。 THANKYOU。