簡體   English   中英

Android:如果x秒鍾內未更改EditText,則調用函數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM