View

728x90

금일 알아 볼 것

오늘은 특별한 개념은 아니고 개인적으로 잊지 않고 나중에 같은 일이 생겼을 때 다시 사용하기 위해서 포스트를 쓴다.


오늘 알아 볼 것은 RecyclerView의 스크롤을 제어 할 수 있는 LinearLayoutManager의 함수인 canScrollVertically() 함수이다.

canScrollVertically() 함수

요녀석은 스크롤이 가능한 상태임을 알려주는 함수이다. 이름에서 Vertically이라는 있듯이 위아래의 이벤트를 받을 수 있다.
정확히는 canScrollVertically(int direction) 형식으로 들어간다.(자바 형식)
해당 direction 부분에 -1이 들어갈 경우 위쪽, 1이 들어갈 경우 아래쪽 이벤트를 받게 된다. 그리고 리턴 값이 false라면 해당 방향의 끝이라는 것이다.

if(!myList.canScrollVertically(-1)) {    
    // 최상단
}
if(!myList.canScrollVertically(1)) {    
    // 최하단
}

이름에서 알 수 있듯이 canScrollHorizontally(int direction)(자바 형식) 함수도 존재하면 해당 함수는 수평을 감지한다.
해당 direction에 -1이 들어가면 왼쪽 1이 들어가면 오른쪽 이벤트를 받게 된다.

오늘 해당 글을 포스트한게 된 이유는 기능 개발 과정에서 RecyclerView의 스크롤을 불가능하게 되는 상황이 발생했는데 구글에는 이상한 ScrollView와 RecyclerView를 같이 사용할 때 쓰는 이상한 것 밖에 없어서 이 글을 쓰게 되었다.

본론으로 가서 해당 함수를 어떻게 이용하면 아에 RecyclerView의 스크롤을 바로 멈출 수 있을까?
바로 아래 코드 처럼쓰면 된다.

 private fun setCategoryAdapter() {
        categoryAdapter = CategoryAdapter(this)
        //해당 부분
        val categoryManager = object : LinearLayoutManager(requireActivity(), VERTICAL, false) {
            override fun canScrollVertically(): Boolean {
                return false
            }
        }
        //여기까지  
        binding.rv.apply {
            layoutManager = categoryManager
            adapter = categoryAdapter
            scrollToPosition(0)
        }
    }

위에 코드는 RecyclerView의 adapter를 세팅하는 부분이다.
여기서 추석 처리한 부분이 바로 오늘의 핵심 부분이다.
즉 해당 LinearLayoutManager의 canScrollVertically()를 재정의해서 해당 리턴 값을 그냥 false를 주게 되면 그냥 스크롤이 작동하지 않게 된다.(requireActivity()는 해당 코드가 Fragment에 있기 때문)



오늘은 간단하게 스크롤을 막는 방법?
원래는 스크롤을 감지하는 함수를 이용해 스크롤을 막는 방법을 알아봤다.
잊지 말자!!
지지 말자!!

'TIL > 스터디' 카테고리의 다른 글

코틀린 함수 참조  (0) 2024.03.29
TabLayout 스크롤 감지 (Viewpager안썻을 때)  (0) 2024.03.28
ScrollView, DataBinding(하위 View 1개만)  (1) 2024.03.26
SavedStateHandle  (0) 2024.03.25
Jetpack Navigation (safe args)  (0) 2024.03.22
Share Link
reply
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30