1

どこかで見つけたオープンソースのnumberpickerを使用しています(Jeffrey F. Coleの功績による)が、バグを見つけました。

numberpicker には、ボタンをタッチしたときに数値をより速く増加させるハンドラーがあります。

long`private Handler repeatUpdateHandler = new Handler();

`

    class RepetetiveUpdater implements Runnable {
    public void run() {
        if (autoIncrement) {
            increment();
            repeatUpdateHandler.postDelayed(new RepetetiveUpdater(),
                    REPEAT_DELAY);
        } else if (autoDecrement) {
            decrement();
            repeatUpdateHandler.postDelayed(new RepetetiveUpdater(),
                    REPEAT_DELAY);
        }
    }
}

 .....

public class NumberPicker extends LinearLayout {

 .....

    // Auto increment for a long click
    increment.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View arg0) {
            autoIncrement = true;
            repeatUpdateHandler.post(new RepetetiveUpdater());
            return false;
        }
    });

    // When the button is released, if we're auto incrementing, stop
    increment.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP && autoIncrement) {
                autoIncrement = false;
            }
            return false;
        }
    });

問題は、ボタンをロングクリックするとカウンターが増加し始めますが、指を押したまま画面上で指をドラッグすると、指を離してもカウンターが加算され続けることです。

では、指が numberpicker レイアウトから外れたことを検出して、カウンターを停止するにはどうすればよいでしょうか?

どうも :)

4

1 に答える 1

1

私はそれがバグであるかどうか確信が持てず、この番号ピッカーが API 自体の numberpicker の上に加えた変更に起因するかどうかさえわかりません。ピッカーの増減を処理するボタンは、ACTION_UP MotionEvent が受信されるまで続行するように設定されていると想定していますが、これは単純化しすぎている可能性があります。

編集:

ストック Android 2.3.3 でこれをテストしましたが、これがまさにその結果です。

編集:

コメントでの説明に基づいて、これはかなり悪いバグのように聞こえます。あなたがする必要があるのは、ハンドラーが ACTION_UP でそのランナブルへのコールバックを削除するようにすることです。パッチを提出できるように、私をプロジェクトにリンクしてもらえますか?

編集

あなたが提供した NumberPicker は Handlers を正しく使用していませんでした、IMO. 後でコールバックを削除できるように同じ Handler への参照を保持する代わりに、投稿するたびに新しい Handler が作成されました。ここでいくつかの変更を加え、問題を修正しました: https://gist.github.com/3657989

于 2012-09-06T14:23:22.000 に答える