1,Android Gridview中按鍵事件的處理有三個方法
public boolean onKeyDown(int keyCode, KeyEvent event)
public boolean onKeyUp(int keyCode, KeyEvent event)
public boolean onKeyLongPress(int keyCode, KeyEvent event)
很明顯,長按事件是放到 onKeyLongPress 函數中來處理的。
GridView如果長按時,預設會先相應短按事件(GridView.setOnItemClickListener())的,而長按鍵事件的處理不應該放到(GridView.setOnLongClickListener())中,而應該放到 onKeyLongPress 函數中來處理,這樣才能做到長按短按就能分開,如果一開始長按就相應長按,短按就相應短按,兩者不會亂掉或者說幹擾。
具體請看如下步驟:
第一步,先在 onKeyDown 函數中判斷 event.getRepeatCount 的次數(實際上長按就是由一系列的onKeyDown事件觸發的)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
。。。。。。
if (event.getRepeatCount() == 0) {
event.startTracking();
return true;
}
return super.onKeyDown(keyCode, event);
}
如果一直按著不放,可以通過Log 查看onKeyDown 的event.getRepeatCount() 數目變化
第二步,重載 onKeyLongPressed 函數,在這個函數中你可以添加你的長按鍵事件的處理
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
lockLongPressKey = true;
長按鍵事件的處理部分;
return true;
return super.onKeyLongPress(keyCode, event);
}
第三步,如果在onKeyUp 函數中也處理了相同的按鍵的話,那麼需要對 onKeyLongPress 和 onKeyUp 中該按鍵的處理作互斥處理了
public boolean onKeyUp(int keyCode, KeyEvent event) {
if(lockLongPressKey){
lockLongPressKey = false;
return true;
}
return super.onKeyUp(keyCode, event);
}
互斥處理的原因是,長按事件處理完後,鬆開按鍵後就會執行 onKeyUp 函數。而這兩處針對相同的按鍵想要實現的功能又不一樣
固在此添加一個 private boolean lockLongPressKey = false; 變數,在 onKeyLongPress 函數中處理過以後,在 onKeyUp中便不再處理。