Android 用户输入后的时间延迟

Android 用户输入后的时间延迟,android,xamarin.android,Android,Xamarin.android,我有一个EditText框,用户键入一个字符串,该字符串被发送到数据库,UI被更新。我使用了TextChanged功能,该功能工作正常。但是,我不想在每次击键后更新UI,而是希望在最后一次击键后等待1/2秒来更新要发送到数据库的字符串。对实施有何建议 editText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => { string text = editText.Text.ToStrin

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

editText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) =>
{
    string text = editText.Text.ToString();                  
};
这可以做到:

new Handler().postDelayed(new Runnable(

    public void run(){

       // your update code here..

    }

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

尽管我认为您可能会尝试更好地保存数据,比如在
EditText
上使用
onfocuschangeenner
并在
EditText
失去焦点后保存数据

编辑:


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

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

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

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

                }

            }, 500);

我们实际上可以使用文本观察覆盖函数来解决这个问题

下面是一个如何做到这一点的例子

也附上完整的描述链接

 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();
        }
    }
};

来源:

请注意,在主线程(UI线程)上执行此操作将冻结用户操作500毫秒或设置睡眠方法的时间。调用睡眠将阻止UI线程。不应调用thread.sleep。哦,谢谢你的提示。这真的很有帮助。看到我编辑过的答案了吗?我是新来的,但我认为onFocusChangeListener在这里不起作用。它是显示项目列表的单个搜索栏。键入后,列表将缩小到仅包含以输入的字符开头的字符串。我希望在用户停止键入1/2秒后更新页面。您对onFocusChangeListener的看法是正确的,但您可以更新每个偶数或奇数字符的结果。。我不建议您使用延迟,因为我认为这对您来说不是一个好的解决方案。我有同样的问题,这段代码将始终调用run(),当您键入fast时,不好的ideamy回答可能会帮助您,当input fast=>nothing send时,停止input 1s=>发送您的请求