안드로이드

RecyclerView setHasFixedSize

코딩하는후운 2022. 3. 29. 13:57
반응형

리사이클러뷰에 새로운 아이템이 삽입되거나, 기존의 아이템이 제거될 때 호출되는 메소드를 매우 함축하여 간결히 표현한 코드이다.

void onItemsInsertedOrRemoved() {
   if (hasFixedSize) layoutChildren();
   else requestLayout();
}

코드를 보면 hasFixedSize 가 true 인 경우 layoutChildren() 을 호출하고, 만약 false 라면 requestLayout() 을 호출하게 된다.

 

  • requestLayout() 

View 의 색깔 및 모양이 아닌 크기가 변화할 때 requestLayout() 을 호출하여 다시 ViewGroup 에 속한 뷰들의 크기 측정부터, 자신의 크기 측정까지 일일히 수행한다고 했다.

 

 

결론

우리는 setHasFixed(true) 를 해줌으로써 대부분의 경우에 High-cost 작업을 피할 수 있다.

리사이클러뷰의 크기가 동적으로 변화하는 경우 (height 혹은 width 를 wrap_content 로 지정한 경우) 가 있을 경우 false 로 지정해야 한다.

만일 동적인 리사이클러뷰에 setHasFixed(false) 를 지정하지 않는다면 제대로 동작하지 않을 것이다.

 

 

출처 :

https://velog.io/@haero_kim/Android-setHasFixedSizetrue-%EC%9D%98-%EC%A0%95%EC%B2%B4

반응형