Рейтинговая панель в Recyclerview не работает

У меня есть Recyclerview, который содержит ratingbar в list_items

Если я использую rtBar.setOnRatingBarChangeListener, то я не получаю результатов, в строке рейтинга ничего не происходит, даже не кликабельно

Если я использую rtBar.setOnTouchListener, он работает, но мой код не работает при нажатии на 4-й запуск

public EmployeeViewHolder(View itemView) {
    super(itemView);
    ButterKnife.bind(this, itemView);
    rtBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            utilMethods.showToast(mContext, "" + rating);
        }
    });
}

person karthik kolanji    schedule 19.04.2016    source источник


Ответы (2)


Если ваш RatingBar не активен, проверьте свой XML-файл, где RatingBar имеет атрибут android:isIndicator="false".

Если isIndicator равно true, вы не сможете оценить

person Ashok Kumar    schedule 28.03.2017
comment
хотя это очень старый вопрос, но эта вещь работает для меня. - person Usman Khan; 05.11.2017

использовать такой интерфейс

 public interface OnRecordEventListener  {
       void onRatingBarChange(Record item,float value);
 }

вы создаете прослушиватель передачи ViewHolder в конструктор, подобный этому.

 public ViewHolder(View itemView, OnRecordEventListener listener) {
          super(itemView);
          textViewTitle = (TextView)     itemView.findViewById(R.id.text_view_title);
          ratingBar = (RatingBar)     itemView.findViewById(R.id.rating_bar_rating);
          bar.setOnRatingBarChangeListener(new     RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float rating,   boolean fromUser) {
            if (fromUser) {
              listener.onRatingBarChange(mRecords.get(getLayoutPosition()),   rating);
            }
           }
          });
         }

И обновить в onCreateViewHolder

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
   View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, viewGroup, false);
            return new ViewHolder(v,mClickListener);
        }

вы также можете использовать интерфейс для других событий, вам просто нужно добавить метод в интерфейс, реализовать его и связать в конструкторе ViewHolder.

ОБНОВЛЕНИЕ Учтите, что вы используете RecyclerView в Activity

public class RecyclerActivity extends Activity implements OnRecordEventListener {
    // all institutionalization, callbacks, hook methods
    @Override
    public void onCreate() {
      // Initialization .....
      mRecyclerView.setLayoutManager(...);
      // Passing this because this class implements interface
      mRecyclerView.setAdapter(new RecyclerViewAdapter(mRecord,this));
    }
    @Override
    void onRatingBarChange(Record item,float value) {
      // do Something
    }
 }
person Dinesh    schedule 19.04.2016
comment
это даже не кликабельно, при чем здесь интерфейс? - person karthik kolanji; 19.04.2016
comment
Старайтесь всегда абстрагировать такие LISTENERS через интерфейс, чтобы вы могли повторно использовать его позже и легко поддерживать код. - person Dinesh; 19.04.2016