有时候新开一个Activity有点慢,然后就出现了ListView的Item两点两次然后跳出了两个Activity的问题。
有时候新开一个Activity有点慢,然后就出现了ListView的Item两点两次然后跳出了两个Activity的问题。
ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
view.setEnabled(false);
view.postDelayed(new Runnable() {
@Override
public void run() {
view.setEnabled(true);
}
}, 300);
}
方案有两种,
方案一: 直接自定义监听器,适用于大量此类操作。
方案二: 直接在方法里拦截,适用于少量此类操作。
自定义一个监听器NoDoubleClickListener
,抽象一个 onNoDoubleClick
方法。
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);
}
用法,在建立监听的时候使用刚刚自定义的监听器,并实现其抽象方法。
view.setOnClickListener(new NoDoubleClickListener() {
@Override
public void onNoDoubleClick(View v) {
//你的代码
}
});
把方案一的时间差判定方法拿出来。。就行了。。
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;}
}
}
用法,
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(Utils.isNotFastClick()){
//你的代码
}
}
});
按照java的设计原则,推荐第一种方案。
其他监听也是同样的自定义方式。
两个结合处理。判断是否快速点击,再设置跳转页面的启动模式launchModel!
public class CalcUtils {
private static long lastClickTime;
//防止重复点击 事件间隔,在这里我定义的是1000毫秒
public static boolean isFastDoubleClick() {
long time = System.currentTimeMillis();
long timeD = time - lastClickTime;
if (timeD >= 0 && timeD <= 500) {
return true;
} else {
lastClickTime = time;
return false;
}
}
}
直接在AndroidManifest.xml
中声明Activity
的时候,launchMode
指定为singleTop
,能够解决大部分情况下打开多次的问题了;
但是如果你们的QA要是非得狂点的话,还是会出现的.
2 回答1.3k 阅读✓ 已解决
2 回答2.7k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.2k 阅读
1 回答1.2k 阅读
1 回答565 阅读✓ 已解决
伪代码。。。写得自己都看不下去了。(捂脸)