ListView的Item会出现点击两次的问题,大家是怎么解决的?
澳门银河官网
澳门银河官网
当前位置 : 澳门银河官网 > 澳门银河官网下载

ListView的Item会出现点击两次的问题,大家是怎么解决的?

有时候新开一个Activity有点慢,然后就出现了ListView的Item两点两次然后跳出了两个Activity的问题。

if 本次点击的时间 - 上次点击的时间 >= 阈值 {
    上次点击的时间 = 本次点击的时间;
    执行点击操作;
}

伪代码。。。写得自己都看不下去了。捂脸

拦截短时间的多次点击操作;
设置flag;
尽量优化新起界面的初始化操作。

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

方案一:

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

public abstract class NoDoubleClickListener implements View.OnClickListener {

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

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

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

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

view.setOnClickListenernew NoDoubleClickListener {

                    @Override
                    public void onNoDoubleClickView 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.setOnClickListenernew View.OnClickListener {
                    @Override
                    public void onClickView v {
                        ifUtils.isNotFastClick{
                            //你的代码
                        }
                    }
                };

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

ListView.setOnItemClickListenernew AdapterView.OnItemClickListener {
            @Override
            public void onItemClickAdapterView<?> parent, final View view, int position, long id {
                view.setEnabledfalse;
                view.postDelayednew Runnable {
                    @Override
                    public void run {
                        view.setEnabledtrue;
                    }
                }, 300;
        }

两个结合处理。判断是否快速点击,再设置跳转页面的启动模式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要是非得狂点的话,还是会出现的.

广告位

澳门银河官网