今天自己寫了一個(gè)搜索框淤井,在寫關(guān)聯(lián)軟鍵盤的回車按鍵時(shí)出現(xiàn)了連續(xù)執(zhí)行兩次的情況。
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
pressSearch = (keyCode == KeyEvent.KEYCODE_ENTER);
if (pressSearch && listener != null) {
if (TextUtils.isEmpty(getText().toString())) {
Toast.makeText(getContext(), "請輸入關(guān)鍵字", Toast.LENGTH_SHORT).show();
}
/*隱藏軟鍵盤*/
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
listener.onSearchClick(v);
}
return false;
}
開始以為是執(zhí)行了兩次監(jiān)聽軟鍵盤按鍵事件的onSearchClick()方法
后來發(fā)現(xiàn)是因?yàn)樵诎聪萝涙I盤回車鍵時(shí)產(chǎn)生了up和down兩種KeyEvent事件
所以只要在判斷中加上 event.getAction() == KeyEvent.ACTION_UP 就可以解決了
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
pressSearch = (keyCode == KeyEvent.KEYCODE_ENTER);
if (pressSearch && listener != null && event.getAction() == KeyEvent.ACTION_UP) {
if (TextUtils.isEmpty(getText().toString())) {
Toast.makeText(getContext(), "請輸入關(guān)鍵字", Toast.LENGTH_SHORT).show();
}
/*隱藏軟鍵盤*/
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
listener.onSearchClick(v);
}
return false;
}
歡迎各位同學(xué)留言交流铺罢。
新手上路,還望多多指教。