버그인지는 모르겠지만 recyclerView
item의 루트 레이아웃을 constraintLayout
으로 설정하고 안에 들어가는 요소들의 제약이 사방으로 설정되어있지 않을 경우, MATCH_PARENT
가 동작하지 않는 문제가 있다.
constraintLayout
뿐만 아니라 다른 레이아웃들도 종종 이러한 문제가 있는 것 같은데, 이런 경우 recyclerView
의 item에 MATCH_PARENT
를 적용하기 위해서는 recyclerView
의 어댑터에서 동적으로 MATCH_PARENT
를 설정해주어야 한다.
→ 다틀렷다 버그는 무슨,, 반성하자ㅠ
→ item view inflating시, parent viewGroup
이 지정되지 않았을 경우, MATCH_PARENT
가 적용되지 않음,,
→ 아래와 같이 MATCH_PARENT
를 동적으로 설정해주어도 문제는 해결되지만, 근본적인 해결방법은 item view inflating시, parent viewGroup
을 지정해주는 것
recyclerView
어댑터의 onCreateViewHolder()
함수에서 뷰를 인플레이팅 할 때 RecyclerView.LayoutParams
를 이용하면 MATCH_PARENT
를 동적으로 설정할 수 있다.private var _viewBinding: ItemViewBinding? = null
private val viewBinding get() = _viewBinding!!
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
_viewBinding = ItemViewBinding.inflate(LayoutInflater.from(parent.context))
setMatchParentToRecyclerView()
return ItemViewHolder(viewBinding)
}
private fun setMatchParentToRecyclerView() {
val layoutParams = RecyclerView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
viewBinding.root.layoutParams = layoutParams
}