現在市場上手機層出不窮,各式各樣,性能也越來越好,有些手機的觸摸靈敏度低,然後就會導致我輕輕的碰了兩下,然後點擊事件就觸發了兩次。
爲了避免這種事情的發生,我根據實際情況定義了一個有可設置點擊時間間隔的點擊事件抽象類,只要實現了該抽象類,傳入一個你需要設定的時間間隔,你就可以避免上面說的快速點擊執行多次操作。
直接先附上該類的所有代碼(包名自己加入自己的包名)
import android.util.SparseArray;
import android.view.View;
/**
* @author Voctex 2015-12-24
* @param 有點擊時間間隔的點擊事件
*
*/
public abstract class IntervalOnClick implements View.OnClickListener {
private long beforeTime = 0;
private int interval_time = 700;
private SparseArray<Long> sparseArray = new SparseArray<Long>();
/**
* @param default interval_time is 700ms
*/
public IntervalOnClick() {
}
/**
* @param set
* click interval_time
*/
public IntervalOnClick(int interval_time) {
this.interval_time = interval_time;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
long currentTime = System.currentTimeMillis();
beforeTime = sparseArray.get(v.getId()) != null ? sparseArray.get(v
.getId()) : 0;
if (currentTime - beforeTime >= interval_time) {
sparseArray.put(v.getId(), beforeTime = currentTime);
IonClick(v);
}
}
public abstract void IonClick(View v);
}
該類利用了系統的時間戳、android建議使用的容器類SparseArray和View的id作爲key,以及抽象類的特性,這個類比較淺顯了,如果有哪裏看不懂可以留言
對了,具體使用是這樣的:
首先要先定義出來,當然也可以不用定義出來,直接使用
private class IOnClick extends IntervalOnClick {
public IOnClick() {
super();
// TODO Auto-generated constructor stub
}
public IOnClick(int interval_time) {
super(interval_time);
// TODO Auto-generated constructor stub
}
@Override
public void IonClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.fragment_text:
break;
default:
break;
}
}
}
這是定義出來的,使用如下:
fragAcLayout.setOnClickListener(new IOnClick());
//或者如下
fragAcLayout.setOnClickListener(new IOnClick(700));
不用定義的如下:
fragAcLayout.setOnClickListener(new IntervalOnClick() {
@Override
public void IonClick(View v) {
// TODO Auto-generated method stub
}
});
//或者如下
fragAcLayout.setOnClickListener(new IntervalOnClick(700) {
@Override
public void IonClick(View v) {
// TODO Auto-generated method stub
}
});
嗯嗯,我感覺我已經寫得夠詳細了,在使用的時候還是出現問題的話,那我真不知道說什麼了,覺得好用的請給我個贊哈~~~