簡體   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