【问题标题】:items in child Recyclerview scrolls automatically子 Recyclerview 中的项目自动滚动
【发布时间】:2016-04-28 06:26:07
【问题描述】:

我有一个 Recyclerview,它的 list_item 中有另一个 Recyclerview(表示子 Recyclerview 在父 Recyclerview 中)

我的孩子 Recyclerview 在其 list_items 中包含 ratingbar

当我点击我的ratingbar 我的孩子Recyclerview 时会自动滚动(例如:第 5 次点击ratingbar,它会自动滚动并带我到第三个评分栏)

我尝试了什么

第一次尝试:

我使用layoutManager.scrollToPosition(moveToPos); 取决于我的ratingbar 点击位置

第二次尝试

rvScore.stopScroll();

还是没有结果

注意此问题发生在某些设备并非全部

如果想贴代码我可以

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);
                }
        }

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    您只需要将下面的行添加到根 RecyclerView

                android:descendantFocusability="blocksDescendants"
    

    一切就绪!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      相关资源
      最近更新 更多