Programming/Android

[Kotlin/Android] DataBinding example

생각하는로뎅 2020. 8. 27. 15:28
반응형

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 으로 접근 가능해졌다.

  - 좀 더 많은 기능이 있지만 여기까지..

 

 

반응형