1

ユーザーがRatingBar星の数を送信できる場所があります。ボタンがありません。よりユーザーフレンドリーにして、動的に送信できるようにしたいです。

メソッドではsetOnRatingBarChangeListener、星を提出します。

質問はこちら

送信する前に 1 秒の遅延を入れたいと思います。ユーザーが別のスターに変更した場合は、タイマーをリセットします。

複数のデータベース送信を防止しようとしています (または、少なくともそれらを制限しようとしています)。

これは可能ですか?そして、これはどのように書くことができますか?

4

1 に答える 1

3

それは間違いなく可能です。これを行う理想的な方法Handlerは、クラスに を作成することです。リスナーが呼び出されたら、送信コードを含む a をキャンセルしRunnable、1 秒で実行するように投稿します。折り返しの電話が初めての場合、キャンセルしても効果はありませんが、問題ありません。Runnable が匿名のものではないことを確認してください。これにより、そのインスタンスが 1 つだけになり、キャンセルできるようになります。

あなたの質問はこれに似ています:

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 に答える