1

私はその問題と長い間戦いましたが、どこにも解決策が見つかりませんでした。いくつかの評価バーを含む ListView があります。スクロールしようとして誤って評価バーにヒットすると、スクロールの代わりに評価が実行されました。今、私は簡単な解決策を見つけました:私は自分のRatingBarを書きました:

public class ScrollableRatingBar extends RatingBar {

    public ScrollableRatingBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ScrollableRatingBar(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScrollableRatingBar(Context context) {
        super(context);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN: {
            return true;

        }
        case MotionEvent.ACTION_MOVE: {
            return true;
        }
        }
        return super.dispatchTouchEvent(ev);

    }

}

何が起こるか: RatingBar をクリックすると、3 つの異なる MotionEvents があります:
-Action_DOWN: 指を下ろします
-Action_MOVE: 指を動かします
-Action_UP: 指を上げます

アクション「ダウン」または「ムーブ」で評価を設定したくありません。そのため、true を返して、それが発生したことを知らせます。「up」が来たら、何をしたかによって、それがスクロールなのか評価なのか、プログラム自体が異なります。

それで全部です!誰かがそれを助けてくれることを願っています。

EDIT:Android 2.3.7以下の問題であることを認識しています。

4

0 に答える 0