我有一个“+”和“ - ”按钮,可以增加/减少一个项目的数量。
每次更改数量时,我都需要发送网络请求(点击网络服务)。
问题是,用户可能会“垃圾”“+”和“ - ”按钮。例如,他们可能会在一秒钟内按下它3次。
关于这种情况,我想等一下,然后根据最后的数量发送网络请求。这是为了减少我需要做的请求数量(在这种情况下,从3个请求到1个请求)。
建议的方法是什么?
我可以使用postDelayed
中的OnClick
来解决此问题吗?
答案 0 :(得分:1)
我认为你可以尝试这样的事情
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秒后仅运行最后一个请求
答案 1 :(得分:0)
作为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();
}
}