android 解决按钮快速点击

来源:互联网 发布:虚拟机连接不上网络 编辑:程序博客网 时间:2024/04/30 07:26

     有经验的android开发人员一般都会遇到一个按钮被快速点击的时候遇到的问题,特别是有线程存在的情况下,问题很明显。当然不同按钮同时或快速点击的时候也会引发问题。这些问题原因无非就是按钮点击之后还没处理完成,另外一个按钮就开始执行了。因此为了解决这样的问题大家都会想到设置两个按钮之间的时间,当快速点击的时候就不执行。类似代码应该是这样的:

     boolean canClick = true;
     long lastTime = Comm.stringToLong(AppConfig.Session.get("clicktime"));
     if(lastTime != 0L){
      long diffTime = System.currentTimeMillis() - lastTime;
      if(diffTime < 1000){
       canClick = false;
      }else{
       AppConfig.Session.put("clicktime",System.currentTimeMillis());
      }
     }else{
      AppConfig.Session.put("clicktime",System.currentTimeMillis());
     }

这样的限制确实能够防止按钮快速点击引起的问题。但是这里有个问题,就是快速点击的时候,不执行的那个按钮就会像是没反应一样,给人的感觉很不好。因此,这里我用的是另外一种办法。办法其实也不难。就是当你点击按钮的时候推迟一定的时间执行,并记录当前时间,然后等这段时间过后再执行原本要执行的方法体。当快速点击的时候只会执行最后一次点击事件。可能说法会有点绕,下面我直接给出代码,想必大家可以看的懂。

public void onClick(View v) {    

AppConfig.Session.put("clicktime",System.currentTimeMillis() );

 final Handler handler = new Handler(){

      @Override
      public void handleMessage(Message msg) {
       boolean canClick = false;
       lastClickTime = Comm.stringToLong(AppConfig.Session.get("clicktime"))
       long diffTime = System.currentTimeMillis() - lastClickTime;
       if(diffTime >= 500){
         canClick = true;
       }
       
       if(canClick){
          //TODO

       }
       
      }};


  Thread thread = new Thread(){

        @Override
        public void run() {
         try {
          Thread.sleep(500);
          Message msg = Message.obtain();
          handler.sendMessage(msg);
         } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }
        }
       };
       thread.start();

}

有什么问题直接给我留言

  


0 0
原创粉丝点击