Android中View的快速点击事件导致重复创建或多次执行解决方案

前言

先上个效果图吧 看看你的情况是否和我一样 是否继续往下看

效果图

问题反馈gif

问题补充

因为我是真机录制的gif图 所以看不到点击效果
其实我是点击立即充值的时候 快速点击2次 就会出现连续跳转 打开2个页面
这个问题 在图中能清晰的看出来

我的想法

这个样子肯定是不行的 我最初的想法是能不能通过一次性设置
以后只要涉及到跳转就不会出现这种情况 通过翻阅资料 查到方法挺多的 我这里就不列举了
我只说一下我用到的方法 比较简单 就是涉及到跳转的逻辑都要判断一次 就可以完美解决
多次创建或者重复打开的的问题!

问题解决

自己写一个工具类 通过时间差来判断 是否点击过快
如果点击过快了就 return 不执行后面的逻辑

我的代码

/**
 * @author lyudony
 * @date 2020/5/21.
 * description:
 */
public class ClickEventUtils {
    //设置时间差
    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;
    }

}

使用方法

普通点击跳转View、Button

@OnClick({R.id.btn_paying})
    public void onClick(View view) {
    	//在这里就加入判断
        if (!ClickEventUtils.isFastClick()) return;
        if (view.getId() == R.id.btn_paying) {
            if (UserUtils.isLogin()) {
                Intent intent = new Intent(getContext(), SubmitOrderActivity.class);
                intent.putExtra(SubmitOrderActivity.KEY_TYPE,
                 SubmitOrderActivity.TYPE_BUY_SINGLE);
                ArrayList<PayModel> list = new ArrayList<>();
                list.add(mPayModel);
                intent.putExtra(SubmitOrderActivity.EXTRA_GOODS, list);
                startActivity(intent);
            } else {
                SnackbarUtils.showUnLogin(getActivity());
            }

        }
    }

Adapter中的item跳转

 private void initEvent() {
        mSwipeRefreshLayout.setOnRefreshListener(this::fetchData);
        mHomeFragmentAdapter.setOnItemChildClickListener(new 
        OnItemChildClickListener() {
            @Override
            public void onItemChildClick(@NonNull BaseQuickAdapter adapter, 
            @NonNull View view, int position) {
            	//在入口处注入点击判断
                if (!ClickEventUtils.isFastClick()) return;
                switch (view.getId()) {
                    case R.id.tv_gasoline_type:
                        if (mCatalogDialog != null) {
                            mCatalogDialog.setOnCatalogSelectListener(
                            new FullOilCatalogDialog.OnCatalogSelectListener() {
                                @Override
                                public void onCatalogSelect(int position) {
                                    OilTypeModel oilTypeModel = mOilTitleList.get(position);
                                    ToastUtils.showShort(getActivity(), "您点击了第" 
                                    + position + "个item");
                                }

                            });
                            if (getFragmentManager() != null)
                                mCatalogDialog.show(getFragmentManager(), "Catalog");
                        }
                        break;
                    case R.id.tv_distance:
                        if (mSortDialog != null) {
                            mSortDialog.setOnTypeSelectListener(new SortDialog.
                                    OnTypeSelectListener() {
                                @Override
                                public void onCatalogSelect(View v) {
                                    if (v.getId() == R.id.tv_distance_sort) {
                                      ToastUtils.showShort(getActivity(), "您点击了距离排序");                                  
                                    } else {
                                      ToastUtils.showShort(getActivity(), "您点击了价格排序");
                                    }
                                }
                            });
                            if (getFragmentManager() != null)
                                mSortDialog.show(getFragmentManager(), "type");
                        }
                        break;
                    case R.id.tv_distance_num:
                        navigation();
                        break;
                }
            }
        });

总结:

效果图我就不传了 反正问题解决了!
在博文开头 我已经说明了 可以解决这个问题的方法有很多
如果你觉得不妥 可以不用☺
我用的原因很简单:封装好工具类后,比较简单 用起来也就一句代码而已
现在项目还比较小 需要用到的地方真的不多
还是那句话吧 不管黑猫还是白猫 能抓耗子才是好猫 哈哈!

与君共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
snails

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕氏春秋i

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值