繁体   English   中英

设置Android Ratingbar的等级

[英]Setting the rating of the Android Ratingbar

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

好的,我还要声明,我将RB用作“收藏夹”按钮。 可能不是最好用的东西,但这并不意味着我不能,对吧?

RB仅由1星组成。 如果用户单击它,它将在“收藏夹”列表中添加一个项目并突出显示该星标。 当用户再次单击它时,一定会从收藏夹列表中删除该项目,但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中使用“ setRating(0)”时,可以肯定将等级设置为0。但是我不能使用RB的setOnRatingBarChangeListener,因为一个人不能“接触”零星。

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

因此,@ Fondesa向我指出了为什么您无法在OnTouch事件中将评级设置为0。

RatingBar是从SeekBar扩展而来的,并且侦听器实际上期望滑动动作。 因此,当只有一颗星时,RB不能设为0(或为此目的而不能设为0)。 ToggleButton是用于此类功能的合适的小部件(在此毫不奇怪)。

您应该注册onTouchListener ,而不是使用OnRatingBarChangeListener 这样,您不必担心检测触摸事件的实现以及它是否会影响评分栏,您只需要担心是否更改了评分即可:

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

http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html

综上所述,我认为您要做的不仅仅是设置布尔值。 如果不是,则应该完全摆脱布尔值,只要实际需要该值,就可以调用favourite_button.getRating()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM