listView数据过多,或点击过于频繁崩溃问题解决(防止按钮重复点击)
2017-10-24 13:47
761 查看
在用户使用 Android 应用的时候,经常会出现过快且多次点击同一按钮的情况,一方面这是因为应用或手机当前有些卡顿,另一方面也可能是由于很多应用并没有设置按钮点击时的 selector 或者其它按钮响应方式(例如点击按钮时按钮放大,常见于游戏),导致用户误认为没有点击到当前按钮,当然,除了相对应的对应用进行优化和设置点击selector以外,我们还可以做一些其它的工作,例如,判断按钮的 onClick 事件在规定事件段内只响应一次(在论坛的搜索功能中,我们常见到每10秒才可以进行一次搜索的设置,这就在一定程度上减少了无效的网络访问量,减轻服务器压力,APP同理),就如下面代码所示:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
上面的代码可以保证同一按钮在1秒内只会响应一次点击事件,这也是大家最常用的方法,不过我更喜欢另一种方法:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
我个人是非常建议给按钮都设置点击 selector 的,这样可以清楚的给用户提示,不过在 Android 项目中并不都是因为没有设置 selector 而导致用户感觉没有点击中这个按钮的,还有一种情况就是这个按钮的可点击热区太小了,或者较小的区域内承载了过多的可点击按钮。
针对按钮的可点击热区较小的情况,我觉得可以使用控件的 paddingxxx 属性替代部分 marginxxx 属性,margin属性指的控件之外的区域,padding则可以将这些区域归为自身所有,这样既可在不改变 UI 的情况下扩大点击热区。
http://www.barryzhang.com/archives/410
http://gold.xitu.io/entry/5710f3832e958a005ca6f407
public class Utils { // 两次点击按钮之间的点击间隔不能少于1000毫秒 private static final int MIN_CLICK_DELAY_TIME = 1000; private static long lastClickTime; public static boolean isFastClick() { boolean flag = false; long curClickTime = System.currentTimeMillis(); if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { flag = true; } lastClickTime = curClickTime; return flag; } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (Utils.isFastClick()) { // 进行点击事件后的逻辑操作 } } });1
2
3
4
5
6
7
8
上面的代码可以保证同一按钮在1秒内只会响应一次点击事件,这也是大家最常用的方法,不过我更喜欢另一种方法:
public abstract class OnMultiClickListener implements View.OnClickListener{ // 两次点击按钮之间的点击间隔不能少于1000毫秒 private static final int MIN_CLICK_DELAY_TIME = 1000; private static long lastClickTime; public abstract void onMultiClick(View v); @Override public void onClick(View v) { long curClickTime = System.currentTimeMillis(); if((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { // 超过点击间隔后再将lastClickTime重置为当前点击时间 lastClickTime = curClickTime; onMultiClick(v); } } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
btn.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { // 进行点击事件后的逻辑操作 } });1
2
3
4
5
6
题外话
我个人是非常建议给按钮都设置点击 selector 的,这样可以清楚的给用户提示,不过在 Android 项目中并不都是因为没有设置 selector 而导致用户感觉没有点击中这个按钮的,还有一种情况就是这个按钮的可点击热区太小了,或者较小的区域内承载了过多的可点击按钮。针对按钮的可点击热区较小的情况,我觉得可以使用控件的 paddingxxx 属性替代部分 marginxxx 属性,margin属性指的控件之外的区域,padding则可以将这些区域归为自身所有,这样既可在不改变 UI 的情况下扩大点击热区。
参考链接
http://www.barryzhang.com/archives/410 http://gold.xitu.io/entry/5710f3832e958a005ca6f407
相关文章推荐
- 解决vue 按钮多次点击重复提交数据问题
- 解决:防止页面按钮被重复点击,导致页面重复提交的问题
- android中ListView点击和里边按钮点击不能同时生效问题解决
- listview复用 数据重复 id错乱问题已解决
- 注册或者点击按钮时,怎么防止用户重复提交数据(实例讲解)
- Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据
- android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
- (转)android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
- ListView出现数据重复的问题的解决
- 解决按钮重复提交问题 (Jtable中重复显示数据)
- android专题解决之按钮快速点击重复调用问题
- Android解决按钮重复点击问题
- android-分页加载ListView 点击Item获取对象数据及ArrayList重复及乱序问题
- js解决列表中按钮重复点击重复提交的问题
- ListView的Intent跳转详情页, 滑动与点击Position错乱导致数据混乱问题解决
- android中ListView点击和里边按钮点击不能同时生效问题解决
- android 自定义ListView 使其带单选框按钮,并解决item点击不响应的问题
- android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
- android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
- android 自定义ListView 使其带单选框按钮,并解决item点击不响应的问题