1

我有一个EditText盒子,用户键入一个字符串,该字符串被发送到数据库并被UI更新。我使用了该TextChanged功能,该功能正常工作。但是,UI我不想在每次击键后更新,我想在最后一次击键后等待 1/2 秒来更新要发送到数据库的字符串。对实施有何建议?

editText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) =>
{
    string text = editText.Text.ToString();                  
};
4

3 回答 3

3

这可以做到:

new Handler().postDelayed(new Runnable(

    public void run(){

       // your update code here..

    }

), 2000);

2000表示代码运行之前的毫秒数。所以在这种情况下是 2 秒。

尽管我认为您可能会尝试考虑更好地保存数据,例如在失去焦点后使用onFocusChangeListener并保存EditText数据..EditText

编辑:

当然上面的代码应该放在文本更改的回调方法中,并且您还应该确保不会在每次按下的键时调用计时器。

于 2013-06-25T18:21:54.387 回答
0

您可以在更新 ui 之前执行以下操作

new Handler().postDelayed(new Runnable(){

                @Override
                public void run() {
                    //Upadating your ui

                }

            }, 500);
于 2013-06-25T18:24:13.137 回答
0

我们实际上可以使用 text-watcher 覆盖函数来解决这个问题

以下是如何完成的示例

还附有完整描述的链接

 private EditText searchText;  
 private TextView resultText;  
 private Timer timer;

      private TextWatcher searchTextWatcher = new TextWatcher() {  
        @Override
        public void afterTextChanged(Editable arg0) {
        // user typed: start the timer
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
              // do required 
            }
        }, 400); // 400ms delay to before executing run, if user stops typing after 400ms function will get fired
    }

     @Override
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {

     }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // reset timer if user is typing
        if (timer != null) {
            timer.cancel();
        }
    }
};

来源:延迟编辑文本

于 2017-09-13T09:12:36.440 回答