長按方向鍵 KeyEvent.KEYCODE_DPAD_DOWN 時,onKeyDown 觸發過快,導致計數器 i++ 偏大、列表滑動過快。
private long lastKeyTime = 0;
private static final long KEY_INTERVAL = 200; // 最小間隔 200ms
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
long now = System.currentTimeMillis();
if (now - lastKeyTime < KEY_INTERVAL) {
return true; // 忽略過快觸發
}
lastKeyTime = now;
// 執行 i++ 等業務邏輯
return true;
}
return super.onKeyDown(keyCode, event);
}
private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - exitTime > 2000) {
Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}