공부방/Android

How to get Android first visible item positions in StaggeredGridLayoutManager

soycrab 2019. 9. 30. 21:08

일반 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))

}
}
})

반응형