View点击过快导致事件多此触发,全局解决
来源:互联网 发布:mysql安装密码 编辑:程序博客网 时间:2024/06/05 03:22
需求:View的点击事件经常是发起业务,但是没做限制的话,快速点击会导致多次调用,发送错误逻辑。
有一种办法是点击了之后设置控件不可点击,待业务完成再恢复点击能力,但是这样每个点击控件都要进行相关的设置,量很大。
所以我想了个方法,自定义一个布局,设置点击间隔时间,继承相对布局,然后把有点击事件的控件外包裹这个布局,调用点击的地方使用自定义布局的点击事件便可,方法代码如下:
布局文件:
<e.DelayTouchRelativeLayout android:id="@+id/r1" android:layout_width="match_parent" android:layout_height="100dp" android:background="@color/b1"> <TextView android:id="@+id/t2" android:layout_width="100dp" android:layout_height="50dp" android:layout_centerInParent="true" android:background="@color/j"/></e.DelayTouchRelativeLayout>
调用文件:
r1 = (DelayTouchRelativeLayout) findViewById(R.id.r1);r2 = (DelayTouchRelativeLayout) findViewById(R.id.r2);t2 = (TextView) findViewById(R.id.t2);t2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { QiuUtil.ShortToast("点击了t2"); }});r1.setOnDelayClickListener(new DelayTouchRelativeLayout.OnDelayClickListener() { @Override public void onClick(View v) { QiuUtil.ShortToast("点击了第1个"); }});
自定义view:
public class DelayTouchRelativeLayout extends RelativeLayout { public DelayTouchRelativeLayout(Context context) { super(context); } public DelayTouchRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public DelayTouchRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } private OnDelayClickListener mOnDelayClickListener; private long time1 = 0; private long time2 = 0; private int delaytime = 6000;//自定义点击间隔时间 public void setOnDelayClickListener(OnDelayClickListener mOnDelayClickListener) { this.mOnDelayClickListener = mOnDelayClickListener; } public interface OnDelayClickListener { void onClick(View v); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { if (time1 == 0) { time1 = System.currentTimeMillis(); mOnDelayClickListener.onClick(this); } else { time2 = System.currentTimeMillis(); QiuUtil.LogE("time1:" + time1); QiuUtil.LogE("time2:" + time2); if (time2 - time1 > delaytime) { mOnDelayClickListener.onClick(this); time1 = time2; } } } return true; }}
还有一种更加简单方法:如下:
阅读全文
0 0
- View点击过快导致事件多此触发,全局解决
- view.performClick()触发点击事件
- view.performClick()触发点击事件
- 解决android应用点击按键过快导致的ANR
- 解决NestedScrollView中,在子View上滑动不触发滚动事件,却触发点击事件
- 解决Android按住空白区域,导致点击其他按钮无法触发点击事件的问题
- 解决Android中点击过快造成重复事件问题
- android 事件分发,解决由于listview中实时刷新,导致子view点击事件失效
- android 解决GestureDetector.SimpleOnGestureListener中对某些view,点击之后总是触发longPress事件
- 解决weex点击事件触发两次
- Android:防止过快点击造成多次事件
- Android 防止过快点击造成多次事件
- Android:防止过快点击造成多次事件
- Android:防止过快点击造成多次事件
- Android:防止过快点击造成多次事件
- Android防止过快点击造成多次事件
- Android防止过快点击造成多次事件
- Android:防止过快点击造成多次事件
- 通过wireshark解析http通信原理(图文)
- J2EE系列之Hibernate4学习笔记(十二)--Hibernate继承关系映射(每个类对应一个表)
- Kubenetes 创建管理hadoop的docker容器的RC和service.yaml文件
- 脚本执行jar包(使用自带jre)
- JS中类型的检测
- View点击过快导致事件多此触发,全局解决
- 几个UDP网络库
- Velocity教程
- gradle 工程依赖 打包 配置文件
- 解决vim 打开的文件不能用鼠标复制到别的文件中
- Gulp.js
- TCP/IP协议(三)——UDP与TCP的区别
- 520,IT工程师们都是如何表白的?
- 分治——归并排序