Butterknife.OnClick中防止按键过快的点击的的一种解决方案。
2017-06-08 21:08
393 查看
按键的防抖就是判断一下两次点击的时间差,但是如果在Butterknife.OnClick中写,每次都要写一堆代码
其实我们希望的最理想的解决方案是:
实现方法如下:
第一个类类似于NoDoubleClickListener 判断下两次点击的时间
第二个类静态变量存储点击事件,可以定制存储的数量超出了可以自动删除之前的。
第三个类就是存储一定对象的链表,超出了定义的范围就删除第一个对象
使用时直接 增加 if (AntiShake.check(view.getId())) 判断就可以了。如果有不对的地方,请提出宝贵的意见。
其实我们希望的最理想的解决方案是:
@OnClick({R.id.record, R.id.combine}) public void onClick(View view) { if (AntiShake.check(view.getId())) { //判断是否多次点击 return; } switch (view.getId()) { case R.id.hos_detail_visit_record: //todo break; case R.id.combine_chart: //todo } }
实现方法如下:
第一个类类似于NoDoubleClickListener 判断下两次点击的时间
public class OneClick { private String methodName; private static final int CLICK_DELAY_TIME = 1000; private long lastClickTime = 0; public OneClick(String methodName) { this.methodName = methodName; } public String getMethodName() { return methodName; } public boolean check() { long currentTime = Calendar.getInstance().getTimeInMillis(); if (currentTime - lastClickTime > CLICK_DELAY_TIME) { lastClickTime = currentTime; return false; } else { return true; } } }
第二个类静态变量存储点击事件,可以定制存储的数量超出了可以自动删除之前的。
public class AntiShake { private static LimitQueue<OneClick> queue = new LimitQueue<>(20); public static boolean check(Object o) { String flag; if(o == null) { flag = Thread.currentThread().getStackTrace()[2].getMethodName(); } else { flag = o.toString(); } for (OneClick util : queue.getArrayList()) { if (util.getMethodName().equals(flag)) { return util.check(); } } OneClick clickUtil = new OneClick(flag); queue.offer(clickUtil); return clickUtil.check(); } }
第三个类就是存储一定对象的链表,超出了定义的范围就删除第一个对象
public class LimitQueue<E> { private int limitedSize; private LinkedList<E> linkedList = new LinkedList<>(); public LimitQueue(int size) { this.limitedSize = size; } public void offer(E e) { if (linkedList.size() >= limitedSize) { linkedList.poll(); } linkedList.offer(e); } public E get(int position) { return linkedList.get(position); } public E getLast() { return linkedList.getLast(); } public E getFirst() { return linkedList.getFirst(); } public int getLimit() { return limitedSize; } public void setLimitedSize(int size) { this.limitedSize = size; } public int size() { return linkedList.size(); } public ArrayList<E> getArrayList() { ArrayList<E> arrayList = new ArrayList<>(); for (int i = 0; i < linkedList.size(); i ++) { arrayList.add(linkedList.get(i)); } return arrayList; } @Override public String toString() { StringBuilder buffer = new StringBuilder(); for (int i = 0; i < linkedList.size(); i++) { buffer.append(linkedList.get(i)); buffer.append(" "); } return buffer.toString(); } }
使用时直接 增加 if (AntiShake.check(view.getId())) 判断就可以了。如果有不对的地方,请提出宝贵的意见。
相关文章推荐
- ButterKnife onclick点击事件没反应
- Android 按键防止过快点击(防抖),在ButterKnife中的简单解决方案。
- ButterKnife onclick点击事件没反应问题
- ButterKnife8.4.0 onclick点击事件没反应
- 防止别人"框"你的网页的一种解决方案,超简单
- Android Butterknife 8.4.0 ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListene
- Android Studio中设置ButterKnife、android butterknife zelezny 注意事项,ButterKnife按钮点击无效原因
- iOS,页面内button防止同时点击的解决方案
- Butterknife bindview @OnClick绑定多控件id
- 防止重复点击退出按键
- Onclick 防止多次点击造成不必要的麻烦
- 一种简单的防止重复点击的工具类
- 点出 退出 按钮,防止点击浏览的 后退 按钮仍然可以进系统的解决方案
- butterknife android studio 无法生成解决方案
- 关于androidStudio中使用ButterKnife8.4.0时点击事件显示为未使用
- Butterknife 绑定控件后,点击事件判断为空,问题解决方法一
- setClickable 设置为true时,表明控件可以点击,如果为false,就不能点击;“点击”适用于鼠标、键盘按键、遥控器等; 注意,setOnClickListener方法会默认把控件的se
- ButterKnife点击事件无效或控件绑定为空
- F5当刷新页面,出现“要再次显示此页,web该浏览器,你曾经有过发送消息再次提交...点击重试",如何防止此对话框解决方案的出现,
- Fresco+RecyclerView+OkHttp+ButterKnife传值+条目点击跳转