繁体   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