티스토리 뷰

Repoleved

[코틀린] 당겨서 새로고침

­­­ ­ 2020. 3. 20. 06:01


Ideal)

서버에 저장된 질문들 리스트가 주르륵 있고

스크롤을 올리다가 리스트의 제일 꼭대기에 도달하면

스크롤을 당겼을 때, "당겨서 새로고침"이 fire 되는 것을 원했어요.



Problem)

리스트 꼭대기가 아닌

리스트의 내 어느 위치에서서라도

스크롤을 위로 올리려고만 시도하면

화면 스크롤이 올라가는 게 아닌, 그 자리에서 당겨서 새로고침이 작동되어버렸어요.


예를 들어,

리스트의 시작 화면이

1

2

3

4

5

라고 치면


스크롤을 좀 아래로 내려서

3

4

5

6

7

이 보이는 상황에서


다시 위로 올라가려고 했을 때, 1, 2 가 보여지도록 올라가는 것이 아닌,

3이 제일 위에 보이는 저 위치 그대로에서 당겨서 새로고침이 fire 되어버렸어요.




Cause)

제가 레이아웃을 짤 때 SwipeRefreshLayout 안에 화면 최상단 고정뷰까지 포함하게끔 만들어버리는 바람에,

그 아래 RecyclerView의 스크롤이 어디에 와있든 상관없이

RefreshListener는 현재 스크롤이 최상단에 있다고 인식한 것이었어요 (ScrollY = 0)




Solution)

스크롤링 되어야하는 RecyclerView를 SwipeRefreshLayout의 외동 자식(?), 혹은 첫째 자식으로 만들어줍니다.

그러면 RecyclerView 안에서 스크롤이 가장 최상단에 위치했을 때만 (리스트의 제일 꼭대기)

Pull to refresh가 작동돼요.




swipeContainer는 제 SwipeRefreshLayout 이에요.

isRefreshing = false 값을 주어야 새로고침 동그라미가 무한대로 돌아가지 않고 적당히 돌다 멈춰요.

댓글