데이터 바인딩 시, 경우에 따라 뷰바인딩 하는 법 정리

Ji·2021년 11월 4일
  • Databinding 사용 시, 사용되는 경우(Activity, Fragment, Adapter, CustomView...)에 따라 xml 레이아웃을 바인딩하는 방법에 차이가 있음

Activity

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    
    val binding = DataBindingUtil.setContentView(this, layoutId)

Fragment, Adapter

val binding = ListItemBinding.inflate(layoutInflater, viewGroup, false)
// or
val binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)
//Fragment 예시
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false)
    //or
    val binding = FragmentMainBinding.inflate(inflater, container, false)
    
    val view = binding.root
    return view
}
//Adapter 예시
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    //View를 넘기는 경우
    val view = LayoutInflater.from(parent.context).inflate(R.layout.item_recyclerview, parent, false)
    return ViewHolderItem(view) //뷰홀더에서 아래와 같이 binding 처리 필요
                                //val binding = DataBindingUtil.bind(view)
    
    //binding을 넘기는 경우
    val binding: ItemRecyclerviewBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.context), R.layout.item_recyclerview, parent, false)
    //or
    val binding = DataBindingUtil.bind(view) //뷰홀더에서 처리하는 binding과 동일
    return ViewHolderItem(binding)
}

CustomView

  • 뷰 그룹을 상속받는 커스텀뷰
  • binding.inflate(layoutInflater, viewGroup, attachToRoot) 함수 사용
binding = DataBindingUtil.inflate(inflater,R.layout.fragment_inbody_write,container,false)
binding.lifecycleOwner = this

참고
https://0391kjy.tistory.com/28

   
profile
공부방

0개의 댓글