본문 바로가기

안드로이드/디자인 패턴

[Android/안드로이드]DataBinding 기본 예제

1. gradle(app)

android{
	dataBinding{
	enabled=true
	applyplugin:'kotlin-kapt'//코틀린 사용시 추가
	}
}

 

2. xml  <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">
<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/i_count_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="70sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

    <Button
        android:id="@+id/i_btn_increase"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="++"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>

    <Button
        android:id="@+id/i_btn_decrease"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="--"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

 

3. 코드 작성

class MainActivity : AppCompatActivity() {
    var count : Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val binding : ActivityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        binding.iCountText.text = count.toString()
        binding.iBtnIncrease.setOnClickListener {
            count++
            binding.iCountText.text = count.toString()
        }
        binding.iBtnDecrease.setOnClickListener {
            count--
            binding.iCountText.text = count.toString()
        }

    }
}
  • DataBindingUtil layout 바인딩
  • 바인딩 타입은 layout(카멜표기)+Binding
  • 뷰들 이름은 카멜표기법

4. 실행

 

5. 문제점

라이프 사이클에 의존하기 때문에 화면 전환시

onDestroy()

onCreate()

호출로 데이터 초기화가 된다.