Android ListView的Item会出现点击两次的问题

Android ListView的Item会出现点击两次的问题

方案有两种,
方案一: 直接自定义监听器,适用于大量此类操作。
方案二: 直接在方法里拦截,适用于少量此类操作。

方案一:

自定义一个监听器NoDoubleClickListener,抽象一个 onNoDoubleClick 方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public abstract class NoDoubleClickListener implements View.OnClickListener {

public static final int DELAY = 10000; //连击事件间隔
private long lastClickTime = 0; //记录最后一次时间

@Override
public void onClick(View v) {
long currentTime = System.currentTimeMillis();
if (currentTime - lastClickTime > DELAY) { //判断时间差
lastClickTime = currentTime; //记录最后一次点击时间
onNoDoubleClick(v);
}
}

//抽象一个无连击事件方法,用于实现内容
public abstract void onNoDoubleClick(View v);
}

用法,在建立监听的时候使用刚刚自定义的监听器,并实现其抽象方法。

1
2
3
4
5
6
7
view.setOnClickListener(new NoDoubleClickListener() {

@Override
public void onNoDoubleClick(View v) {
//你的代码
}
});

方案二:

把方案一的时间差判定方法拿出来。。就行了。。

1
2
3
4
5
6
7
8
9
10
11
public class Utils {
public static final int DELAY = 1000;
private static long lastClickTime = 0;
public static boolean isNotFastClick(){
long currentTime = System.currentTimeMillis();
if (currentTime - lastClickTime > DELAY) {
lastClickTime = currentTime;
return true;
}else{return false;}
}
}

用法,

1
2
3
4
5
6
7
8
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(Utils.isNotFastClick()){
//你的代码
}
}
});

按照java的设计原则,推荐第一种方案。
其他监听也是同样的自定义方式。

参考:https://segmentfault.com/q/1010000004395999

Fork me on GitHub