1

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

即,当编辑EditBox时,应用程序必须空闲1秒,如果它再次被编辑,如果为真,则等待另一秒,如果为假,则执行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);
        }
    }
};

这个方法有没有改进的地方?还是它实际上是一种有效的方法?

4

1 回答 1

-1

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

于 2012-08-02T11:03:01.113 回答