Fragment recyclerView in NestedScrollView scrollToPosition issue

Chance·2023년 3월 3일

NestedScrollView안에 있는 리싸이클러뷰의 아이템으로 scrollToPosition을 할 경우

float y = recyclerView.getY();
or
float y = recyclerView.getChildAt(position);
nestedScroll.scrollToPosition((int)y)

등등의 값으로 받아와야 해당 아이템으로 스크롤을 할 수가 있는데, getY, getChildAt에서 null 또는 0값을 받아오는 경우가 있다.

예상컨데,
fragment에서 recyclerView를 그려주긴 그려주는데, 해당 위젯의 정확한 좌표값을 가져오기 위해서는 listener를 필요로 하는 듯 하다.

가령, TabLayout에서 selectTab리스너 안에 getY, getChildAt() 을 사용한 경우 해당 리사이클러뷰의 아이템 좌표값을 받아오는 것을 확인할 수 있었다.

따라서, 다른 방법을 찾기 전까지는 TreeObsever를 달아서 해당 리사이클러뷰의 아이템 위치값을 찾아주어야 할 것 같다.

        // 리사이클러뷰의 위치값을 받기위해 위젯트리 설정
       _rvGroupShowAllClass.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Log.d("test", "" + _rvGroupShowAllClass.getId());
                Log.d("test", "" + _rvGroupShowAllClass.getY());
                Log.d("test", "" + _rvGroupShowAllClass.getChildAt(1).getY());

                NestedScrollView.scrollTo(0 , (int) _rvGroupShowAllClass.getChildAt(_position).getY());

                _rvGroupShowAllClass.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });

0개의 댓글