1

我有RatingBar一个用户可以提交星号的地方。我没有按钮,我想让它更加用户友好并让它动态提交。

setOnRatingBarChangeListener方法中,我提交了星星。

这是问题

我想在提交之前延迟 1 秒,如果用户更改为不同的星星,请重置计时器。

我试图阻止多个数据库提交(或至少限制它们)。

这可能吗?这怎么写?

4

1 回答 1

3

这绝对是可能的。一个理想的方法可能是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);
    }
}
于 2013-06-15T01:37:20.503 回答