我目前正在尝试在Android中集成实时搜索功能。我使用自定义的自动完成小部件。小部件本身为我提供了一个阈值,只有在输入一定数量的字符后才启动查询。但我还想要的是,查询只会启动,比如用户已经停止输入2秒钟。
当我用AsyncTask
加载我的内容时,我尝试通过在开头调用Thread.sleep()来阻止doInBackground
函数。如果用户然后继续键入该程序将查看现有任务,取消它并开始新任务。这是我的想法。但它并没有像我预期的那样发挥作用。有时,即使用户仍在键入,它也会发出查询,有时在用户停止输入后会取消查询。
您对此有什么想法,或者可能是解决此问题的更好方法吗?
以下是代码段:
1。在文本上调用的函数更改:
public void afterTextChanged(Editable s) {
if(mWidget.enoughToFilter()) {
if(mTask != null && mTask.getStatus() != Status.FINISHED) {
mTask.cancel(true);
}
mTask = new KeywordSearchLoader(mActivity,
mItems);
mTask.execute(s.toString());
}
}
2。 doInBrackground
try {
Thread.sleep(Properties.ASYNC_SEARCH_DELAY);
} catch (InterruptedException e) {
Log.e(TAG, "the process was interrupted while sleeping");
Log.w(TAG, e);
}
由于 菲尔
答案 0 :(得分:2)
创建Handler
并使用.postDelayed(..)
在延迟一段时间后运行后台任务。
如果用户按下该键,请拨打handler.removeCallback(..)
,然后再次.postDelayed(..)
添加新的延迟回拨。