我与这个问题斗争了很长时间,却没有在任何地方找到解决方案。我有一个包含一些 RatingBars 的 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”,则程序本身会有所不同,它是滚动还是评级,这取决于您所做的。
就这样!我希望有人帮助。
编辑:我意识到这是 Android 2.3.7 及更低版本的问题。