我的应用有问题 垃圾邮件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是否等于最后一个
,在最后一个延迟处理程序调用上执行DoSearchet = (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);
}
}
};
有一个地方可以改进这种方法吗?或者它实际上是一种有效的方式?
答案 0 :(得分:-1)
添加delayed Handler,每次调用onTextchanged都会从处理程序中删除上一条消息并保持1秒延迟发布。如果在一秒钟内调用ontextChanged,则前一个Dosearch将被取消