现在市场上手机层出不穷,各式各样,性能也越来越好,有些手机的触摸灵敏度低,然后就会导致我轻轻的碰了两下,然后点击事件就触发了两次。
为了避免这种事情的发生,我根据实际情况定义了一个有可设置点击时间间隔的点击事件抽象类,只要实现了该抽象类,传入一个你需要设定的时间间隔,你就可以避免上面说的快速点击执行多次操作。
直接先附上该类的所有代码(包名自己加入自己的包名)
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
}
});
嗯嗯,我感觉我已经写得够详细了,在使用的时候还是出现问题的话,那我真不知道说什么了,觉得好用的请给我个赞哈~~~