代码之家  ›  专栏  ›  技术社区  ›  philgiese

如何在Java中实现javascript setTimeout函数

  •  0
  • philgiese  · 技术社区  · 14 年前

    我正在尝试在android中集成实时搜索功能。我使用自定义的自动完成小部件。小部件本身为我提供了一个阈值,仅在输入了一定数量的字符后才开始查询。但我也希望查询只在用户停止输入2秒后才开始。

    当我用一个 AsyncTask 我试着挡住 doInBackground 函数的开头调用Thread.sleep()。如果用户将继续键入,程序将查看现有的任务,取消它并启动一个新任务。这是我的主意。但它并不像我所期望的那样工作。有时它发送查询,即使用户仍在键入,有时在用户停止键入后取消查询。

    以下是代码片段:

    一。对文本调用的函数将更改:

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

    try {
        Thread.sleep(Properties.ASYNC_SEARCH_DELAY);
    } catch (InterruptedException e) {
        Log.e(TAG, "the process was interrupted while sleeping");
        Log.w(TAG, e);
    }
    

    谢谢 菲尔

    1 回复  |  直到 14 年前
        1
  •  2
  •   Peter Knego    14 年前

    创建 Handler 使用 .postDelayed(..)

    如果用户按键,则调用 handler.removeCallback(..) 然后再 添加新的延迟回调。