//DatabindingUtil
binding = DatabindingUtil.inflate(inflater, R.layout.frameLayout, parent, false)
//Binding class
binding = MainActivityBinding.inflate(inflater)
보통 ViewBinding을 사용할 때는 XML 파일명의 이름을 딴 Binding class를 사용한다. 예를 들어 XML 파일명이 activity_main 이라면 Binding class는 ActivityMainBinding 이런식으로 생성된다( _기준으로 전자는 앞에, 후자는 뒤에).
다음은 프래그먼트에서 Binding class를 사용했을 때의 예시다.
class MainFragment : Fragment() {
private lateinit var binding: MainPageBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding= TodaydietPageBinding.inflate(inflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
뷰 inflate 시 파라미터로 inflater만 넘겨주면 사용할 수 있다.
다음은 프래그먼트에서 DatabindingUtil을 사용했을 때의 예시다.
class MainFragment : Fragment() {
private lateinit var binding: MainPageBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding= DatabindingUtil.inflate(inflater, R.layout.layout_name, parent, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
일단, 딱 눈으로 봤을 때 두 클래스는 차이가 있다. Binding class를 생성할 때는 전달인자로 inflater만 넘겨주지만, DatabindingUtil 클래스를 사용할 때는 inflater 뿐만 아니라 layout id도 넘겨준다.
왜 Binding class는 id를 넘기지 않고, DatabindingUtil은 id를 넘길까? 궁금할 때는 바로 Stackoverflow다.
대강 유추해보면 DatabindingUtil은 layout id를 모르는 상황에서 해당 layout을 참조해야 할 때 사용하는 것처럼 보인다.
Binding class를 생성하는 것에 대한 안드로이드 개발자 문서에서는 다음과 같이 설명한다.
DataBindingUtil에 대한 개발자 문서에서도 DataBindingUtil의 inflate() 메서드에 대해 이렇게 소개한다.
결국 둘 차이는 별 것 없다. layout id를 아느냐 마느냐에서 차이가 오는 것이다. DataBindingUtil은 layout id에 해당하는 inflate된 layout에 대한 Binding class를 생성해서 반환해준다(layout id에 해당하는 layout이 존재하지 않을 경우에는 null을 리턴해준다).
https://developer.android.com/topic/libraries/data-binding/generated-binding#views_with_ids
https://developer.android.com/reference/android/databinding/DataBindingUtil#inflate(android.view.LayoutInflater,%20int,%20android.view.ViewGroup,%20boolean)
https://stackoverflow.com/questions/51893495/android-databinding-databindingutil-vs-binding-class