我有RatingBar
用户可以提交星号。我没有它的按钮,我想让它更友好,让它动态提交。
在setOnRatingBarChangeListener
方法中,我提交星标。
这是问题
我想在提交之前延迟1秒,如果用户更改为其他星号,请重置计时器。
我正在尝试阻止多个数据库提交(或至少限制它们)。
这可能吗?怎么写呢?
答案 0 :(得分:3)
绝对有可能。这样做的理想方法可能是在班级中创建Handler
。当监听器被调用时,取消包含提交代码的Runnable
并将其发布为在1秒内运行。如果这是你第一次收到回叫,取消将没有任何效果,但这没关系。确保您的Runnable不是匿名的,因此只有一个实例可以取消它。
您的问题与此类似:
How to remove a runnable from a handler object added by postDelayed?
以下是一些代码:
Handler mHandler = new Handler(Looper.getMainLooper());
Runnable mSubmit = new Runnable() {
public void run() {
// Submit to server ...
}
}
RatingBar.OnRatingBarChangeListener mListener =
new RatingBar.OnRatingBarChangeListener() {
void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
mHandler.removeCallbacks(mSubmit);
mHandler.postDelayed(mSubmit, 1000);
}
}