불로구

안드로이드 스튜디오 - DataBinding & LiveData 본문

프로그래밍/안드로이드

안드로이드 스튜디오 - DataBinding & LiveData

맹이맹이 2021. 4. 6. 14:27
반응형

LiveData란?

cometome1004.tistory.com/137

 

안드로이드(Kotlin) - LiveData

LiveData -> Data의 변경을 관찰 할 수 있는 Data Holder 클래스 -> LiveData는 Observable과 다르게 안드로이드의 생명주기를 알고 있다. -> 활성상태에서만 데이터를 업데이트 -> LiveData는 Observer 객체와 같..

cometome1004.tistory.com

 

DataBinding이란?

-> Android JetPack 라이브러리의 하나의 기능으로써, xml파일에 Data를 연결해서 사용할 수 있는 기능

-> findViewById를 통해 아이디를 매칭하지 않아도 된다.

-> BindingAdapter를 이용하여 ImageView에 관련된 로딩 라이브러리를 이용해서 이미지를 쉽게 출력 가능

-> MVVM 패턴 구현 시 편리해진다.

 

그래서 장점은?

-> ID 매칭 없이 XML에 만든 VIEW들을 자동으로 만들어 준다.

-> 옵저버를 이용하여 Data가 바뀌면 view도 맞춰서 변경

 

android {
    ...
   dataBinding {    
 	   enabled true
   }
}

-> graddle에서 kapt plugin 세팅

 

<?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.example.databinding.MainActivity" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{activity.liveText}"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/button1"
            app:layout_constraintVertical_chainStyle="packed"/>

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="버튼1"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/text_view"
            app:layout_constraintBottom_toBottomOf="parent"/>
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="버튼2"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/text_view"
            app:layout_constraintBottom_toBottomOf="parent"/>

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

 

package com.example.databinding

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData
import com.example.databinding.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    val liveText = MutableLiveData<String>()


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.apply {
            lifecycleOwner = this@MainActivity // lifecycleOwner 지정
            activity = this@MainActivity // xml파일에 선언한 activity

            button1.setOnClickListener {
                liveText.value = "Hello LiveData"
            }

            button2.setOnClickListener {
                liveText.value = "Hello DataBinding"
            }
        }
        liveText.value = "Press Button"
    }
}

반응형
Comments