[Kotlin/Android] DataBinding example
1. DataBinding 이란
- xml에 있는 데이터들을 코드단으로 손쉽게 바인딩 시켜준다.
- 2019년 Google I/O에서 설명한바 있다. DataBinding, Navigation, Room, View Model .. 등등
2. 장점
- findViewId 를 쓰면, 런타임에 뷰 계층 구조를 찾아야하며, 딥 뷰 계층 같은 경우는 사용자 앱 속도를 늦출 수 있다. 이것을 해결하기 위해서 DataBinding 기술과 패턴이 나왔다.
- 컴파일 타임에 레이아웃 또는 프래그먼트들을 연결할 수 있게 만들어주어, DataBinding 으로 오버 헤드 없이 사용할 수 있는 장점이 있다.
3. 개발 환경
- Android Studio 3.6 이상
4. Gradle 설정 (Module: app)
android {
...
dataBinding {
enabled = true
}
}
5. xml 설정 (layout > activity_main.xml)
명심해야할것은 꼭 최상위 <layout> </layout> 으로 감싸야한다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp" />
<Button
android:id="@+id/roll_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/roll" />
</LinearLayout>
</layout>
6. kotlin (MainActivity.kt)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.rollButton.text = "Let's Roll!!"
}
}
ActivityMainBinding 을 하고, import 된것을 보면, 패키지명.프로젝트명.databinding.ActivityMainBinding 으로 될것이다.
이름이 정의된 규칙은 아래와 같다.
1) xml 파일 명이 activity_main.xml 이면 ActivityMainBinding 이다.
2) xml 파일 명이 main_activity.xml 이면 MainActivityBinding 이다.
7. 결과
- setContextView 가 없어지고, DataBindingUtil 으로 setContextView 하는것을 볼 수 있다.
- binding 객체로 findViewId 없이, xml에 선언된 +id/roll_button가 binding.rollButton 으로 접근 가능해졌다.
- 좀 더 많은 기능이 있지만 여기까지..