安卓实战中防止Button的频繁点击多次执行点击事件和点击切换文字

来源:互联网 发布:物联网编程技术 编辑:程序博客网 时间:2024/05/01 03:56

哈哈,今天来写两种button在安卓开发实战的对应效果处理,也是对button的点击事件触发过程的处理。
开发实战中button事件处理3种情况:

  • 情况一:button点击触发倒计时
  • 情况二:button频繁点击(特别是触发网络请求),本人公司是金融公司很容易产生两笔交易的情况
  • 情况三:button点击时不断轮流切换文字

看效果:
这里写图片描述

情况一:button触发倒计时

请移步我的:频繁点击
安卓CountDownTimer实现全民夺宝抢购倒计时和短信验证码倒计时

情况二:

用户非常快的双击按钮 按钮事件相当于二次
怎么控制一个Button俩次点击的时间大于2s

  • 每次点击事件执行之前 先判断俩次点击间隔是否大于2000毫秒

package com.losileeya.buttonclick;import android.view.View;/** * User: Losileeya (847457332@qq.com) * Date: 2016-05-21 * Time: 20:22 * 类描述: * * @version : */public abstract class OnClickEvent implements View.OnClickListener {    private static long lastTime;    public abstract void singleClick(View v);    private long delay;    public OnClickEvent(long delay) {        this.delay = delay;    }    @Override    public void onClick(View v) {        if (onMoreClick(v)) {            return;        }        singleClick(v);    }    public boolean onMoreClick(View v) {        boolean flag = false;        long time = System.currentTimeMillis() - lastTime;        if (time < delay) {            flag = true;        }        lastTime = System.currentTimeMillis();        return flag;    }}
上面是对点击事件进行处理:
具体使用:

singleClick.setOnClickListener(new OnClickEvent(delayTime) {            @Override            public void singleClick(View v) {                Snackbar.make(v,"防止重复点击额",Snackbar.LENGTH_SHORT).show();            }        });

情况三:点击button来回切换文字

上述的情况比如淘宝的购物车里面就有出现,我这里也是以
*完成/编辑
来回切换的。

package com.losileeya.buttonclick;import android.os.Bundle;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import butterknife.BindView;import butterknife.ButterKnife;public class MainActivity extends AppCompatActivity {    @BindView(R.id.single_click)    Button singleClick;    @BindView(R.id.change_click)    Button changeClick;    //通过标志来动态显示文字    private int flag=0;    //延迟时间    private  int delayTime=2000;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        doEvent();    }    private void doEvent() {        singleClick.setOnClickListener(new OnClickEvent(delayTime) {            @Override            public void singleClick(View v) {                Snackbar.make(v,"防止重复点击额",Snackbar.LENGTH_SHORT).show();            }        });        changeClick.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                flag = (flag + 1) % 2;//点击然后改变flag的值                changeClick.setText(flag >0?"编辑":"完成");            }        });    }}

1 0