일반 LinearLayoutManager 같은 경우는
findFirstVisibleItemPosition() 을 이용해서 바로 아이템을 가져 올수 있는데,
StaggeredGridLayoutManager은 어떻게 가져 올수 있을까?
StaggeredGridLayoutManager의 findFirstVisibleItemPosition의 구조는 아래와 같은데
public int[] findFirstVisibleItemPositions(int[] into) {
if (into == null) {
into = new int[mSpanCount];
} else if (into.length < mSpanCount) {
throw new IllegalArgumentException("Provided int[]'s size must be more than or equal"
+ " to span count. Expected:" + mSpanCount + ", array size:" + into.length);
}
for (int i = 0; i < mSpanCount; i++) {
into[i] = mSpans[i].findFirstVisibleItemPosition();
}
return into;
}
findFirstVisibleItemPositions에 spanCount크기 만큼의 IntArray를 넣어주면
현재 보여지고 있는 첫번째 줄의 item 들을 반환해준다.
따라서 쉽게 사용 하려면 아래와 같이 사용 하면 된다.
home_rv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val spanCount = (recyclerView?.layoutManager as StaggeredGridLayoutManager).spanCount
val firstVisiblePosition =(recyclerView.layoutManager as StaggeredGridLayoutManager).findFirstVisibleItemPositions(IntArray(spanCount))
}
}
})
'공부방 > Android' 카테고리의 다른 글
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!