私はその問題と長い間戦いましたが、どこにも解決策が見つかりませんでした。いくつかの評価バーを含む 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以下の問題であることを認識しています。