Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上处理非常快速的按钮点击_Android - Fatal编程技术网

在Android上处理非常快速的按钮点击

在Android上处理非常快速的按钮点击,android,Android,我有一个“+”和“-”按钮,可以增加/减少项目的数量 每次更改数量时,我都需要发送网络请求(点击webservice) 问题是,用户可能会“垃圾邮件”的“+”和“-”按钮。例如,他们可能会在一秒钟内按3次 对于这种情况,我想等待一秒钟,然后根据最后的数量发送网络请求。这是为了减少我需要执行的请求数量(在本例中,从3个请求减少到仅1个请求) 推荐的方法是什么 我可以在我的OnClick中使用postdayed来解决这个问题吗?我想你可以试试这样的方法 private long lastClick;

我有一个“+”和“-”按钮,可以增加/减少项目的数量

每次更改数量时,我都需要发送网络请求(点击webservice)

问题是,用户可能会“垃圾邮件”的“+”和“-”按钮。例如,他们可能会在一秒钟内按3次

对于这种情况,我想等待一秒钟,然后根据最后的数量发送网络请求。这是为了减少我需要执行的请求数量(在本例中,从3个请求减少到仅1个请求)

推荐的方法是什么


我可以在我的
OnClick
中使用
postdayed
来解决这个问题吗?

我想你可以试试这样的方法

private long lastClick;

void onClick(View view) {
    lastClick = System.currentTimeMillis();

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if (System.currentTimeMillis() - lastClick >= 1000) {
                makeNetworkRequest();
            }
        }
    }, 1000);
}

此代码将跳过第一个请求,并在暂停1秒后仅运行最后一个请求,作为对Ivan答案的更新,并修复了两个问题:

  • 逻辑不需要postDelayed,它会增加额外的1秒延迟

  • 将更新移动到lastClick进入循环,我们只希望在实际触发网络调用时更新它

范例

private long lastClick;

void onClick(View view) {
    // Check if network call has been made in last second
    if (System.currentTimeMillis() - lastClick >= 1000) {
        // Mark time of network call    
        lastClick = System.currentTimeMillis();
        makeNetworkRequest();
    }
}

为什么我会被否决(这听起来像是UI/UX问题,他们可能滥发该按钮,因为他们看不到响应或微调器。相反,您可以在等待响应完成时禁用该按钮并显示微调器。@cyroxis是的,我同意,问题是我对该项目的UI/UX控制很少,因此我必须实现他们的设计。@cyroxis是的,我同意gnedYou可以在不延迟发布的情况下执行相同的操作,只需将
运行
代码直接移动到
onClick
方法中。但是每次单击按钮都会发送新请求,否?感谢您的帮助!您的代码似乎不会在第一次单击时运行。因此用户需要单击两次以验证if条件。我仍在尝试ing要找到一些解决方法,我将System.currentTimeMillis()更改为SystemClock.elapsedRealtime(),并且您的代码正在工作,但只要单击按钮,它就会发送网络请求。我想在这种情况下我们不能使用postDelayed。我不知道,您可以尝试的另一种方法是使用新线程(Runnable.start()。放入Runnable Thread.sleep(1000)并重试。希望有帮助。