Как установить RatingBar в качестве индикатора с фиксированными звездами без включения OnRatingBarChangeListener - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь разрешить пользователям ставить свой рейтинг сервиса, и я хочу запретить пользователю добавлять рейтинг дважды, проблема в том, что, когда пользователь уже оценил сервис, а я получаю количество звездочек из базы и местаих в строке рейтинга срабатывает OnRatingBarChaneListener, и это снова добавляет ценность к базе данных.это мой код, пожалуйста, помогите мне.

   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) {

        }
    });

1 Ответ

0 голосов
/ 08 июня 2018

onRatingChanged имеет параметр boolean fromUser из документов :

логический : True, если изменение рейтинга было инициировано пользователемсенсорный жест или клавиша со стрелкой / горизонтальное перемещение трекбелла.

Я думаю, вам просто нужно проверить, является ли это значение True перед отправкой нового рейтинга на Firebase

...