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