如何在不触发 OnRatingBarChangeListener 的情况下将 RatingBar 设置为具有固定星星的指标

How to set a RatingBar as indicator with fixed stars without triggering OnRatingBarChangeListener

我试图让用户对服务进行评分,我想阻止用户两次添加评分,问题是当用户已经对服务进行评分并且我从 firebase 检索星号时并将它们放在评级栏中,OnRatingBarChaneListener 被触发并再次为 firebase 增加价值。 这是我的代码,请帮助我。

   final DatabaseReference r = database.getReference("rating");
    r.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (final DataSnapshot snapshot5 : dataSnapshot.getChildren()){
                final Rating rt = snapshot5.getValue(Rating.class);
                final String ratingId= snapshot5.getKey();
                               // Toast.makeText(InfoService.this,key,Toast.LENGTH_SHORT).show();
                assert rt != null;
                if(!(rt.getId().equals(account.getUid())) && (rt.getIdservice().equals(key))) {
                    RatingB.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
                        @Override
                        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {

                            String rateId = r.push().getKey();

                            // Toast.makeText(InfoService.this,"thank you for voting"+key,Toast.LENGTH_SHORT).show();
                            Rating rate = new Rating(rateId,account.getUid(),key,rating);
                            r.child(rateId).setValue(rate);
                            //  int stars = Math.round(rating);
                            RatingB.setRating(rating);
                            RatingB.setIsIndicator(true);


                        }
                    });



                                }else {
                    textrate.setText("Votre evaluation");
                    RatingB.setIsIndicator(true);
                    RatingB.setRating(rt.getStar());

                }


                }

                            }



        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

onRatingChanged有一个参数boolean fromUser,来自docs

boolean: True if the rating change was initiated by a user's touch gesture or arrow key/horizontal trackbell movement.

我认为您只需要在将新评级发送到 Firebase

之前检查此值是否为 True