Search code examples
androidratingbar

Setting a listener on a RatingBar is always called


I'm using a RatingBar in my app and trying to set a listener on it when a user rates.

xml

<RatingBar
  android:id="@+id/ratingBar"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_centerVertical="true"
  android:numStars="5" />

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_watch_video);

    (...) //findViewById
    ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            Toast.makeText(context, "on rating bar changed", Toast.LENGTH_SHORT).show();
        }
    });

}

However the listener (setOnRatingBarChangeListener) is always called when the activity starts, despite any physical interaction on it.

What could be my issue here?


Solution

  • Use like this - 
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_watch_video);
    
        (...) //findViewById
        ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
    if(fromUser){
                Toast.makeText(context, "on rating bar changed", Toast.LENGTH_SHORT).show();
    }
            }
        });
    
    }