공부방/Android

Android dynamic change StaggeredGridLayoutManager span count (span 갯수 동적으로 변경 하는 방법 )

soycrab 2019. 9. 30. 14:35

StaggeredGridLayoutManager 를 이용해서 

 

각 항목마다 보여지는 방식을 다르게 구성하고, 

 

마지막 카테고리는 영상처럼 Grid 뷰로 구성하였는데, 

 

동적으로 Span 카운트를 변경하려고 해보니,

 

ScrollListener가 동작을 하지 않았다. 

 

stackoverflow 에서  알려주는 방식은 대충 

 

home_rv.apply {
     layoutManager = StaggeredGridLayoutManager(spanCount, LinearLayoutManager.VERTICAL)

     adapter = this@HomeViewModel.adapter
}

 

위와 같이 layoutManager 를 바꿔 주면서 SpanCount 를 변경해주고, 

 

adapter 또한 변경해 주라는 내용이었다. 

 

물론 이방식도 단순하게 보여지는 갯수만 바꾸는 거라면 큰 문제는 없는 

 

코드이지만, 

 

무한 스크롤을 사용하고 있는 나에게는 

 

위 방식을 적용후 보여지는 갯수는 바뀌었지만,

 

스크롤 이벤트가 더이상 동작 하지 않았다. 

 

그래서 그냥  StaggeredGridLayoutManager의 속성을 찾아보니 

 

바로 해결할수 있는 방법이 있었다.  

 

fun changeGridlayoutSpanCount(spanCount: Int) {
     if(spanCount < 2) return
     (home_rv.layoutManager as StaggeredGridLayoutManager).spanCount = spanCount

}

 

이렇게 기존 RecyclerView의 layoutManager 를 StaggeredGridLayoutManager로 케스팅 해서 

spanCount 만 바꿔주면 아래 영상 처럼 바로바로 적용 가능 하다 . 

 

 

 

반응형