我有一个EditText
框,用户输入一个字符串,然后将字符串发送到数据库并更新UI
。我使用了TextChanged
函数,函数正常工作。但是,不是在每次击键后更新UI
,而是在最后一次击键后等待1/2秒,以更新要发送到数据库的字符串。有关实施的任何建议吗?
editText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) =>
{
string text = editText.Text.ToString();
};
答案 0 :(得分:3)
这可以做到:
new Handler().postDelayed(new Runnable(
public void run(){
// your update code here..
}
), 2000);
2000 表示代码运行前的毫秒数。所以在这种情况下是2秒。
虽然我认为您可能会考虑更好地保存数据,例如在onFocusChangeListener
上使用EditText
并在EditText
失去焦点后保存数据.. < / p>
修改强>
当然上面的代码应该放在文本更改的回调方法中,你还应该确保在按下的每个键上都不会调用计时器。
答案 1 :(得分:0)
您可以在更新ui
之前执行以下操作new Handler().postDelayed(new Runnable(){
@Override
public void run() {
//Upadating your ui
}
}, 500);
答案 2 :(得分:0)
我们实际上可以使用文本观察器覆盖功能来解决这个问题
下面是一个如何完成的示例
还附上完整描述的链接
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();
}
}
};