Kotlin 을 이용한 Data Binding을 위한 셋팅
데이터 바인딩은 넓은 호환성을 위해 Android 2.1 이상(API level 7)에서 사용할 수 있도록 되어 있음. (엄청난 호환성.. )
1. 세팅
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
}
....
dataBinding{
enabled = true
}
Module level의 Gradle에 위와 같은 설정을 해준다.
MainActivity에 버튼을 하나 만들어서 로그를 출력하는 형태로 개발
activity_main.xml 의 경우 기본 설정되는 layout을 감싸는 형태로 layout을 써줘야 한다.
말이 이상한데 아래 코드를 보고 확인
<?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">
<data>
<variable
name="activity"
type="com.cleancode.android_espresso_test.MainActivity" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_start_webview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{activity::btnClick}"
android:text="Start WebView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
위 코드를 보면 ConstraintLayout 위에 layout 이라는 상위 값이 생겼다.
이렇게 한번 더 감싸줘서 사용해야 DataBinding이 된다.
주의깊게 봐야 할 것은 Button view에 onClick 이다.
android:onClick="@{activity::btnClick}"을 통해서 마치 이전에 view를 생성후 onClickListener를 달아서 처리해 준것과 같은 효과를 가진다.
package com.cleancode.android_espresso_test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.databinding.DataBindingUtil
import com.cleancode.android_espresso_test.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.activity = this@MainActivity
}
fun btnClick(view: View) {
Log.i("MainActivity", "btnClick")
}
}
MainAcitivty 코드인데 우선 acitivity_main.xml에 생성된 button view를 클릭하면 btnClick이 실행되도록 하였다.
위 코드를 보면
private lateinit var binding: ActivityMainBinding
이 코드가 있는데, AcitivtyMainBinding의 경우 위 activity_main.xml 파일에 layout으로 감싸 주면 자동으로 생성되는 클래스이다.
( 추가적으로 ActivityMainBindingImpl 도 생성되는데 이 부분에서 error cannot find symbol databinding impl 가 발생하는 경우가 있다. 이부분은 향후에 에러가 발생하면 원인을 추가적으로 찾아보면 된다. )
참고 사이트 : hoonyspark.tistory.com/6
위 코드를 작성하면 버튼을 눌렀을 때 "btnClick" 로그가 출력된다.
'Develop > Android' 카테고리의 다른 글
Android - RSA Encrypted / Decrypted (0) | 2021.05.10 |
---|---|
Android - ActivityBindingImpl error: cannot find symbol (0) | 2021.04.08 |
Android - USB 없이 Wifi로 디바이스로 디버깅 하는법 (0) | 2021.02.15 |
Android - FCM Background Screen On (0) | 2021.01.12 |
Android - TYPE_STEP_COUNTER, TYPE_STEP_DETECTOR (0) | 2020.12.27 |