EditText侦听器延迟再次执行之前

时间:2012-08-02 10:59:43

标签: android delay execute

我的应用有问题 垃圾邮件EditText字段后崩溃了 如何在执行“DoSearch”之前为代码添加延迟?

也就是说,当编辑EditBox时,应用程序必须空闲1秒钟,并监听它是否再次被编辑 若是真的,再等一下 如果为false,则执行DoSearch

我希望你能理解我的情况

et = (EditText) findViewById(R.id.Searchfield);
et.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) { }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        new DoSearch().execute();
    }
}); 

修改: 好吧,我解决了这个问题 我将int searchCount定义为0 每次TextEdit被更改时,它都被称为延迟处理程序 延迟处理程序仅通过检查searchCount是否等于最后一个

,在最后一个延迟处理程序调用上执行DoSearch
et = (EditText) findViewById(R.id.SearchCoupon);
et.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) { }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        searchCount++;
        SearchHandler.sendMessageDelayed(SearchHandler.obtainMessage(searchCount), 1000);   
    }
}); 


private Handler SearchHandler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        if(msg.what == searchCount) {
            new DoSearch().execute();
            System.out.println("Success" + searchCount + "=" + msg.what);
        }
        else {
            System.out.println(msg.what + " - " + searchCount);
        }
    }
};

有一个地方可以改进这种方法吗?或者它实际上是一种有效的方式?

1 个答案:

答案 0 :(得分:-1)

添加delayed Handler,每次调用onTextchanged都会从处理程序中删除上一条消息并保持1秒延迟发布。如果在一秒钟内调用ontextChanged,则前一个Dosearch将被取消