Android: recyclerView 아이템 MATCH_PARENT 동적 설정

yxnsx·2021년 1월 6일
0

Dev: Android

목록 보기
4/8
post-thumbnail

버그인지는 모르겠지만 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을 지정해주는 것


MATCH_PARENT 동적 설정하기

  • 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
}


📝 References

0개의 댓글