Android:如果在x秒内没有更改EditText,则调用函数

时间:2016-02-17 00:49:23

标签: java android android-layout

我正在使用这个应用程序,只要EditText中的文本发生变化,它就会向服务器发送请求。它的工作原理很好。

问题是,如果我每次编辑文本发生变化时都发送请求,那么最终会有很多请求。而且我不想使用“发送”按钮。

我想要的东西是这样的:

如果用户输入edittext,则会有一些计时器继续运行。如果计时器达到x秒,它将执行请求。但是如果用户再次键入,计时器将重置。

这样,只有在用户停止输入后才会发送请求。

你可能知道一些更好的方法,我很高兴听到它。

提前致谢:D

2 个答案:

答案 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。