项目实现搜索功能时,使用Charles抓包查看网络请求,发现使用软键盘触发一次搜索会执行2次Api请求。通过调试发现原因是Android的EditText通过setOnEditorActionListener给文本编辑框设置监听事件,但是在其处理方法onEditorAction中的逻辑在每次回车后都触发了两次,原来是在键盘回车的ACTION_UP和ACTION_DOWN时都会触发这个方法。因此需要对代码做下调整,防止执行2次网络请求耗费流量和性能。
etSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
doSearch();
return true;
}
return true;
}
});