난 정말 최고야 멋있어
안드로이드 데이터 바인딩 본문
https://developer.android.com/topic/libraries/data-binding?hl=ko
0. 왜 데이터 바인딩?
findViewById같은 경우는 호출할때마다 뷰 하이어라키를 순회하는 매우 비싼 작업 ㅜㅜ
데이터 바인딩을 사용하면 컴파일 타임에 미리 결정을 하기 때문에 복잡한 UI를 가진 경우 더 빠른 성능을 낼 수 있다
(대신 빌드 시간은 길어지겠죠 아마도..)
1. 모듈수준의 build.gradle 수정
dataBinding{
enabled = true
}
2. xml 레이아웃 수정
- 전체를 <layout>~</layout> 으로 감싸고 루트뷰의 스키마 옮기기
- 데이터 클래스를 추가하고 싶다면 data > variable 요소 추가 name 속성에는 xml에서 사용할 이름, type 속성엔 클래스의 경로를 적어주면 된다 ( data를 기존의 루트 뷰와 동일한 레벨으로 해주세요)
- 데이터 클래스의 요소의 값으로 할당하기 위해 "@{xxx.yyyy}" 이런식으로 값을 할당해주면 됨
3. 액티비티 코드 수정
lateinit var binding : ActivityMainBinding //바인딩 객체
private val data : SthData = SthData("Example")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
// 위의 코드랑 밑의 코드랑 같은 코드임
// binding = ActivityMainBinding.inflate(layoutInflater)
// setContentView(binding.root)
}
바인딩 클래스의 경우 "파스칼케이스 + Binding "으로 명명된다 ex)activity_main.xml -> ActivityMainBinding
그 이후 binding 의 요소에 접근하는 식으로 기존의 findViewById로 했던 작업들을 동일하게 할 수 있다
*바인딩의 요소들은 카멜케이스로 명명된다
ex ) binding.textView1.text = "Hello Binding"