之前做按鈕的點擊事件一直沒有注意一些細節,今天做了一個按鈕需要有點擊和長點擊觸發不同效果,直接讓Activity implements OnClickListener, OnLongClickListener然后添加了相應的處理函數。
@Override public void onClick(View v) { // TODO Auto-generated method stub } @Override public boolean onLongClick(View v) { // TODO Auto-generated method stub return false; }
沒多做考慮,直接在函數內添加了我想要的實現。在一次不經意的測試中發現,在我的按鈕點擊時間中有一個臨界值,當我單下按鈕的時間等於這個臨界值的時候,點擊事件和長點擊事件會同時觸發。點擊事件自然是沒什么問題,導致這個問題一定是長點擊事件出了問題,回過頭仔細看長點擊事件的方法,發現它和點擊事件基本沒有區別,唯一的區別就是多了一個返回值。那么這個返回值究竟有什么用呢,查了一下開發文檔,對這個方法描述如下:
Public Methods
public abstract boolean onLongClick (View v)
Added in
API level 1
Called when a view has been clicked and held.
Parameters
| v | The view that was clicked and held. |
|---|
Returns
- true if the callback consumed the long click, false otherwise.
說明了如果返回值為true的話這個點擊事件會被長點擊獨占,否則相反。
這下就可以理解了為什么之前的點擊會同時觸發兩個點擊事件。
將onLongClick的返回值設置為true,即可避免這個問題的發生。
