情况一:
用户非常快的双击按钮 按钮事件相当于二次
怎么控制一个Button俩次点击的时间大于2s
- 每次点击事件执行之前 先判断俩次点击间隔是否大于2000毫秒
上面是对点击事件进行处理: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来回切换文字
上述的情况比如淘宝的购物车里面就有出现,我这里也是以
*完成/编辑
来回切换的。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?"编辑":"完成"); } }); } }