티스토리 뷰
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 값을 주어야 새로고침 동그라미가 무한대로 돌아가지 않고 적당히 돌다 멈춰요.