设置Android分级栏的分级

设置Android分级栏的分级,android,Android,因此,我试图在触摸事件期间在代码中设置RatingBar RB小部件的等级。基本上,当用户单击RB时,它必须做一些背景工作,然后RB的值应该明显地显示新的值 好的,我还要声明,我正在使用RB作为最喜欢的按钮。这可能不是最好的选择,但这并不意味着我不能,对吧 RB只有一颗星。如果用户单击它,它会将一个项目添加到收藏夹列表并高亮显示该星星。当用户再次单击它时,肯定会从收藏夹列表中删除该项目,但RB不会重置为0 favourite_button.setOnTouchListener (new View

因此,我试图在触摸事件期间在代码中设置RatingBar RB小部件的等级。基本上,当用户单击RB时,它必须做一些背景工作,然后RB的值应该明显地显示新的值

好的,我还要声明,我正在使用RB作为最喜欢的按钮。这可能不是最好的选择,但这并不意味着我不能,对吧

RB只有一颗星。如果用户单击它,它会将一个项目添加到收藏夹列表并高亮显示该星星。当用户再次单击它时,肯定会从收藏夹列表中删除该项目,但RB不会重置为0

favourite_button.setOnTouchListener (new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
  if (event.getAction() == MotionEvent.ACTION_UP) {
    if (_favourited) {
      // do stuff
      favourite_button.setRating(0);
      _favourited = false;
    } else {
      // do stuff
      favourite_button.setRating(1);
      _favourited = true;
    }
  }
  return false;
}});
我的代码运行良好,我只是不明白为什么不利因素不能将RB改回0

那么问题出在哪里呢?当我在setOnRatingBarChangeListener中使用setRating0时,它肯定会将评级设置为0。但是我不能使用RB的setOnRatingBarChangeListener,因为一个人不能触摸零星


如何在再次单击时将其设置回0?

因此@Fondesa向我指出了为什么不能在OnTouch事件中将评级设置为0

分级栏从SeekBar扩展而来,侦听器实际上需要一个滑动动作。因此,当只有一颗星时,RB不能设置为0或不设置为0。用于此类功能的适当小部件是ToggleButton,这一点毫不奇怪

您应该注册OnRatingBarChangeListener,而不是在onTouchListener上使用。这样,您就不必担心检测触摸事件的实现以及这是否会影响分级栏,您只需担心分级是否发生了变化:

favourite_button.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            _favourited = rating > 0;
        }
    });

话虽如此,我想你所做的不仅仅是设置一个布尔值。如果你不喜欢,你应该完全去掉布尔值,只要你真正需要这个值,你就可以调用favorite_按钮。getRating

做一个favorite star要比使用一个带有双星资源的ImageButton好上百倍,一个在不喜欢的时候设置,一个在喜欢的时候设置。是的,我可以这样做,但我仍然不明白为什么会发生这种情况。老实说,为什么我不能使用评级条来达到这个目的呢?我同意这个小部件不是为这个目的而设计的,但是我应该仍然能够以这样的方式使用它。对不起,我不想在这件事上装腔作势,我只是想知道为什么会发生这种事@丰德萨感谢你的评论仅仅因为要取消设置评级栏,用户不需要点击它,而是从官方文档中从右向左滑动。如果你只有一颗星,你就不能滑动,因为空间太小了。哦,我明白了,你说得对。它实际上是从SeekBar扩展而来的。谢谢我明白为什么会这样。另外,我决定使用ToggleButton。为了达到这个目的,工作得更好。谢谢@Fondesa没问题,编码快乐!是的,我一开始试过这个,作为一个使用分级栏时应该使用的听众。这是正确的实现,我同意。但是。我具体的问题是,一个人不能取消选择,可以说,一个评级条。最初它被设置为0级,对吗?我的问题是,为什么用户在将评级条设置为0(比如1星)后不能将其设置为0?因此我尝试了很多方法,但我真愚蠢,竟然尝试使用一个星型评级条作为最喜欢的按钮。比率杆从SeekBar延伸。这也意味着要使用移动动作。