sitelink1 | https://thinkerodeng.tistory.com/286 |
---|---|
sitelink2 | https://stackoverflow.com/questions/5593...ainbinding |
sitelink3 |
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
}
buildFeatures{
dataBinding = true
viewBinding = 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 으로 될 것이다.
import [패키지명].[프로젝트명].databinding.ActivityMainBinding 코드로 임포트 해야 한다
그리고 다음과 같이 접근할 수 있다
lateinit var binding: ActivityMainBinding
binding = ActivityMainBinding.inflate(layoutInflater)
이름이 정의된 규칙은 아래와 같다.
1) xml 파일 명이 activity_main.xml 이면 ActivityMainBinding 이다.
2) xml 파일 명이 main_activity.xml 이면 MainActivityBinding 이다.
7. 결과
- setContextView 가 없어지고, DataBindingUtil 으로 setContextView 하는것을 볼 수 있다.
- binding 객체로 findViewId 없이, xml에 선언된 +id/roll_button가 binding.rollButton 으로 접근 가능해졌다.
※ 클래스 파일에서 binding code가 계속해서 에러를 뱉어낸다면 Clean Project, Rebuild Project 를 수행하도록 한다
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
15 |
[구글 ML Kit Vision Quickstart 분석] Intro
![]() | 황제낙엽 | 2022.12.13 | 241 |
14 | view 객체의 eventlistener 함수 정의와 실행 분석 (StillImageActivity.kt) | 황제낙엽 | 2022.11.29 | 143 |
13 | 람다를 활용한 이벤트 리스너 정의 (자바와 코틀린 비교) | 황제낙엽 | 2022.11.29 | 227 |
12 |
[코틀린] 고차함수와 람다함수
![]() | 황제낙엽 | 2022.11.29 | 182 |
11 |
코틀린 코루틴 관련 포스트
![]() | 황제낙엽 | 2022.11.29 | 170 |
10 | [코틀린] 고차함수 | 황제낙엽 | 2022.11.28 | 165 |
9 | android gradle plugin 의 kotlin_version 수정 | 황제낙엽 | 2022.11.22 | 231 |
» | [Kotlin/Android] DataBinding | 황제낙엽 | 2022.11.13 | 205 |
7 |
[코틀린, 카메라 샘플] QRCodeReader (샘플 확인 완료)
![]() | 황제낙엽 | 2022.11.11 | 223 |
6 |
[코틀린, youtube, 안드로이드 앱 만들기] 카메라로 사진 찍기 (샘플 확인 완료)
![]() | 황제낙엽 | 2022.11.11 | 303 |
5 | Kotlin의 기본 문법 | 황제낙엽 | 2022.11.04 | 376 |
4 | [코틀린, youtube] 카메라로 사진찍어 저장하기 강의 | 황제낙엽 | 2022.11.03 | 203 |
3 |
[예제 소스 코드] <Must Have Joyce의 안드로이드 앱 프로그래밍 with 코틀린> 예제
![]() | 황제낙엽 | 2022.11.03 | 206 |
2 |
[코틀린] 구글 ML Kit를 이용한 바코드 스캐너
![]() | 황제낙엽 | 2022.11.01 | 203 |
1 | 코틀린(Kotlin) 학습용 링크 모음 | 황제낙엽 | 2018.10.11 | 265 |