1

I have a Recyclerview that has another Recyclerview in its list_item (means child Recyclerview inside parent Recyclerview)

My child Recyclerview contains ratingbar in its list_items.

When I click on my ratingbar my child Recyclerview scrolls automatically (example : 5th ratingbar clicked , its scrolls auto and takes me to 3rd ratingbar)

what i tried

1st attemp :

I used layoutManager.scrollToPosition(moveToPos); depending on my ratingbar clicked position

2nd attemp

rvScore.stopScroll();

still no result

Note this issue happpens in some device not allenter image description here

If wanted to post code I can

employeeSurveyViewHolder.rtBar.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                //answerCompleted = answerCompleted + 1;
                                setRatingClick(v, event, position, employeeSurveyViewHolder);
                                v.onTouchEvent(event);
                                return true;
                        }
                });



private void setRatingClick(View v, MotionEvent event, int position, EmployeeViewHolder employeeSurveyViewHolder) {

                model = list.get(position);
                int stars;
                if (event.getAction() == MotionEvent.ACTION_UP) {
                        float touchPositionX = event.getX();
                        float width = employeeSurveyViewHolder.rtBar.getWidth();
                        float starsf = (touchPositionX / width) * 5.0f;
                        stars = (int) starsf + 1;
                        if (stars == 5) {
                                employeeSurveyViewHolder.rtBar.setRating(4);
                                stars = 4;
                        } else {
                                employeeSurveyViewHolder.rtBar.setRating(stars);
                        }
                        try {
                                switch (stars) {
                                        case 1:
                                                employeeSurveyViewHolder.tvRatingStatus.setText("POOR");
                                                model.rating = stars;
                                                if (ratingPos != position) {
                                                        answersList.remove(position);
                                                        answersList.add(position, "" + model.rating);
                                                        answerCompleted = answerCompleted + 1;
                                                        ratingPos = position;
                                                } else {
                                                        answersList.set(position, "" + model.rating);
                                                }
                                                break;
                                        case 2:
                                                employeeSurveyViewHolder.tvRatingStatus.setText("FAIR");
                                                model.rating = stars;
                                                if (ratingPos != position) {
                                                        answersList.remove(position);
                                                        answersList.add(position, "" + model.rating);
                                                        answerCompleted = answerCompleted + 1;
                                                        ratingPos = position;
                                                } else {
                                                        answersList.set(position, "" + model.rating);
                                                }
                                                break;
                                        case 3:
                                                employeeSurveyViewHolder.tvRatingStatus.setText("GOOD");
                                                model.rating = stars;
                                                if (ratingPos != position) {
                                                        answersList.remove(position);
                                                        answersList.add(position, "" + model.rating);
                                                        answerCompleted = answerCompleted + 1;
                                                        ratingPos = position;
                                                } else {
                                                        answersList.set(position, "" + model.rating);
                                                }
                                                break;
                                        case 4:
                                                employeeSurveyViewHolder.tvRatingStatus.setText("EXCELLENT");
                                                model.rating = stars;
                                                if (ratingPos != position) {
                                                        answersList.remove(position);
                                                        answersList.add(position, "" + model.rating);
                                                        answerCompleted = answerCompleted + 1;
                                                        ratingPos = position;
                                                } else {
                                                        answersList.set(position, "" + model.rating);
                                                }
                                                break;
                                        default:
                                                employeeSurveyViewHolder.rtBar.setRating(0);
                                                break;
                                }
                        } catch (Exception e) {
                                e.printStackTrace();
                        }

                        Log.d(TAG, "list.size(): = " + list.size());
                        Log.d(TAG, "answerCompleted: = " + answerCompleted);
                        Log.d(TAG, "answersList.size(): = " + answersList.size());

                        if (list.size() == answerCompleted) { // if nos of question is = to nos of answerCompleted
                                completedListener.isRatingCompleted(true, "" + answersList, position);
                                //Log.d(TAG, "setCompleted: = true");
                        } else {
                                completedListener.isRatingCompleted(false, "" + answersList, position); // just scrolling the recycler view.

                                //Log.d(TAG, "setCompleted: = false");
                        }

                        // Allow parent to intercept touch events.
                        v.getParent().requestDisallowInterceptTouchEvent(false);
                        v.setPressed(false);
                }
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        // Disallow parent to intercept touch events.
                        v.getParent().requestDisallowInterceptTouchEvent(true);
                        v.setPressed(true);
                }
                if (event.getAction() == MotionEvent.ACTION_CANCEL) {
                        v.setPressed(false);
                }
        }
karthik kolanji
  • 2,044
  • 5
  • 20
  • 56

1 Answers1

2

You just need to add the line below to the root RecyclerView

            android:descendantFocusability="blocksDescendants"

And you're all set!

Rez
  • 4,501
  • 1
  • 30
  • 27