뷰바인딩에서는 inflate 함수가 2가지 오버로드된 버전으로 제공됩니다. 이 두 가지 버전의 차이는 attachToParent 매개변수의 유무입니다. 다음은 두 가지 버전의 inflate 함수의 예시 코드입니다.
//attachToParent 사용 하지 않음
val binding = ActivityMainBinding.inflate(layoutInflater)
//attachToParent 사용
val binding = ActivityMainBinding.inflate(layoutInflater, parent, attachToParent = false)
리사이클러뷰에서는 binding을 이용해 뷰홀더를 만드는 과정에서는 해당작업을 할 때는 아래와 같은 inflate 함수를 사용해야 합니다. 만약 그렇지 않고 layoutInflater만 사용하는 inflate 함수를 만든다면
이와 같이 뷰가 짤려서 보일 것입니다. true로 설정하면 인플레이트된 뷰가 부모 뷰 그룹에 자동으로 추가됩니다. 그러나 RecyclerView에서는 이를 false로 설정해야 합니다. 왜냐하면 RecyclerView는 뷰 홀더(ViewHolder)를 관리하고, 뷰를 자동으로 추가하거나 제거하기 때문입니다. 또한 RecyclerView의 레이아웃 매니저에 의해 뷰의 크기와 위치가 관리되므로 attachToParent를 false로 설정해야 합니다.
따라서 리사이클러뷰의 어댑터(Adapter) 내에서 뷰바인딩을 사용할 때, 다음과 같이 inflate 메서드를 호출해야 합니다
ItemRecylerViewLinearType2Binding.inflate(
LayoutInflater.from(parent.context),parent,false
)
여기서 attachToParent는 뷰를 부모에 자동으로 추가하지 않도록 합니다. 이렇게 하면 뷰 홀더의 크기가 최소로 설정되지 않고 제대로 작동하게 됩니다.
'안드로이드 > 안드로이드' 카테고리의 다른 글
[Android/Kotlin] 퍼미션(권한)허용 (0) | 2023.09.12 |
---|---|
[Android/Kotlin] 리사이클러뷰(RecyclerView) 스와이프 이벤트 (0) | 2023.09.11 |
[Android/Kotlin] 프래그먼트안 프래그먼트에서 뒤로가기 (0) | 2023.09.04 |
[Android/Kotlin] 알림(Notification) - 1, NotificationChannel 속성 (2) | 2023.09.01 |
[Android/Kotlin] 리사이클러뷰(RecyclerView) 스크롤 이벤트 (2) | 2023.08.31 |