공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 안드로이드 스튜디오에서 자바가 아닌
코틀린으로 데이터 바인딩하는 방법에 대해 공부합니다.
1. 프로젝트 생성하기
이건 뭐 다들 아시죠? 프로젝트 생성 시
import kotlin 어쩌구 체크 안 하셔도 됩니다.
2. build.gradle(Project)와 build.gradle(app) 에 코드 추가하기
- build.gradle(Project)
buildscript {
ext.kotlin_version = '1.2.21'
ext.android_plugin_version = '3.1.0'
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:$android_plugin_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
위와 똑같이 해주시면 됩니다.
- build.gradle(app)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android'
android {
compileSdkVersion 26
defaultConfig {
applicationId "dev.cr.com.kotlindatabinding"
minSdkVersion 17
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
kapt "com.android.databinding:compiler:$android_plugin_version"
}
app 파일에도 여러 줄의 코드가 추가되는데요.
위에서 under-line에 bold 처리 된 코드들이 추가된 코드들이에요.
kapt "com.android.databinding:compiler:$android_plugin_version"
위 라이브러리의 버전은 꼭 gradle의 버전과 맞춰주어야 합니다.
혹여나 app 파일에 아래 코드가 있다면 지워주시면 됩니다.
apply plugin: 'kotlin-android-extensions'
3. databinding 할 클래스를 만들어 줍니다.
저는 정말 간단하게 만들었습니다.
package dev.cr.com.kotlindatabinding
data class Constss(val hello : String)
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
4. layout.xml 파일에 태그 추가 및 data, variable 추가하기
<?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="constss"
type="dev.cr.com.kotlindatabinding.Constss"/>
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="dev.cr.com.kotlindatabinding.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{constss.hello}"
android:textColor="#000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>
5. Activity 에 코드 추가하기
package dev.cr.com.kotlindatabinding
import android.databinding.DataBindingUtil
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import dev.cr.com.kotlindatabinding.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val constss = Constss("HELLO WORLD!")
binding.setVariable(BR.constss, constss)
}
}
Activity 에 들어가는 코드는 자바와 크게 다르지 않습니다.
그런데 여기까지만 하고 빌드를 하면???
아래 사진처럼 제대로 바인딩이 되지 않습니다.
코틀린은 자바와는 약간 다르게
binding.executePendingBindings()
바인딩 가장 마지막에 위 코드를 넣어줘야 정상적으로 동작합니다.
package dev.cr.com.kotlindatabinding
import android.databinding.DataBindingUtil
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import dev.cr.com.kotlindatabinding.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val constss = Constss("HELLO WORLD!")
binding.setVariable(BR.constss, constss)
binding.executePendingBindings()
}
}
이제 정상적으로 바인딩 된 걸 볼 수 있습니다.
별로 어렵지 않죠?
이상입니다.
감사합니다.
'안드로이드' 카테고리의 다른 글
안드로이드 Volley 라이브러리를 이용한 스프링과의 통신 예제! (0) | 2018.03.30 |
---|---|
안드로이드 코틀린에 setOnClickListener 사용방법! (0) | 2018.03.30 |
안드로이드 Toast custom 커스텀 토스트메시지 만들기! (0) | 2018.03.29 |
안드로이드: 파이어베이스 클라우드 스토리지 Firebase Cloud storage url로 이미지 불러오기! (13) | 2018.03.26 |
안드로이드 다이얼로그 라이브러리 소개! Android Dialog Library - afollestad/material-dialogs (0) | 2018.03.23 |