[英]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.