Development/Kotlin
Kotlin에서 DataBinding 사용하기
지으니88
2018. 1. 16. 23:18
Kotlin에서 DataBinding 사용하기
Kotlin에서 DataBinding을 사용하려면 아주 간단한 설정 후 사용 할 수 있다.
1. build.gradle 설정
앱 모듈의 build.gradle에 databinding 요소를 추가한다.
build.gradle
1 2 3 4 5 6 | android { .... dataBinding { enabled = true } } | cs |
2. layout 파일
DataBinding 레이아웃 파일은 layout의 루트 태그로 시작하고 그 뒤에 data요소와 view루트 요소가 나온다.
따라서 xml 파일의 루트를 layout 태그로 감싼다.
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context="android.pje.com.webparsersample.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </RelativeLayout> </layout> | cs |
자바에서는 위의 1,2번 구성 후 DataBinding을 사용 할 수 있지만, Kotlin은 추가 설정이 필요하다.
3. DataBinding 사용
Activity에서 DataBinding을 사용해본다.
MainActivity.kt
1 2 3 4 5 6 7 8 9 | class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) } } | cs |
여기까지 한 후 빌드를 해보면 컴파일 에러가 난다.
'Unresolved reference: ActivityMainBinding'
ActivityMainBinding를 참조하지 못하는 것이다.
4. build.gradle 추가 설정
kapt 플러그인을 추가해주고 DataBinding를 의존성을 아래와 같이 추가한다. 이때 버전은 gradle 버전과 같게 해준다.
build.gradle
1 2 3 4 5 6 7 8 9 10 11 | apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' ... ... dependencies { // notice that the compiler version must be the same than our gradle version kapt "com.android.databinding:compiler:3.0.1" } | cs |
5. import ActivityMainBinding
다시 화면으로 와서 참조되지 않았던 ActivityMainBinding을 import가 가능한 것을 볼 수 있다.
import 한 후 컴파일 에러가 사라진다.
MainActivity.kt
1 | import android.pje.com.webparsersample.databinding.ActivityMainBinding | cs |