我有RatingBar
一个用户可以提交星号的地方。我没有按钮,我想让它更加用户友好并让它动态提交。
在setOnRatingBarChangeListener
方法中,我提交了星星。
这是问题
我想在提交之前延迟 1 秒,如果用户更改为不同的星星,请重置计时器。
我试图阻止多个数据库提交(或至少限制它们)。
这可能吗?这怎么写?
这绝对是可能的。一个理想的方法可能是Handler
在你的类中创建一个。当侦听器被调用时,取消Runnable
包含提交代码并发布它以在 1 秒内运行。如果这是您第一次收到回调,取消将无效,但没关系。确保您的 Runnable 不是匿名的,因此只有一个实例,因此可以取消它。
您的问题与此类似:
如何从 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);
}
}