DataBinding 사용법

2023. 1. 12. 02:16Android Jetpack/AAC

  • 데이터바인딩이란?
  • 이름처럼 데이터를 연결해주는 역할을 할수있다. (데이터와 같이 결합해서 사용할수 있음) 
  • View.xml 코드에 작성함으로서 Activity나 Frgment에 작성하지않아도된다.

 

<?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="viewmodel"
            type="com.example.viewmodel.MyViewModel" />
    </data>

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

        <TextView
            android:id="@+id/textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{viewmodel.mapCounter.toString()}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:text="증가"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textview" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
  • ViewModel
package com.example.viewmodel

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations
import androidx.lifecycle.ViewModel

class MyViewModel : ViewModel() {
    private val liveCounter = MutableLiveData(0)
    val mapCounter = Transformations.map(liveCounter) { liveCounter ->
        "${liveCounter}입니다"
    }

    fun liveDataCounter() {
        liveCounter.value = liveCounter.value?.plus(1)
    }

}

 

  • View 
package com.example.viewmodel

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.example.viewmodel.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var myViewModel: MyViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //데이터바인딩 적용.
        val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)

        //뷰모델 적용
        myViewModel = ViewModelProvider(this)[MyViewModel::class.java]

        //LiveData를 관측하기위해 lifecycleowner정의
        //xml 데이터뷰를 가지고있는 viewmodel 를지정.
        binding.lifecycleOwner = this
        binding.viewmodel = myViewModel

        // ViewModel + Livedata 적용
        binding.button.setOnClickListener {
            myViewModel.liveDataCounter()
            //   }
            //옵저버 패턴 (관찰해주는역할)
            //  myViewModel.mapCounter.observe(this) {
            //   binding.textview.text = it.toString()
        }
    }
}

데이터바인딩 을 이용해 값이 바뀌는걸 구현해보았습니다.

'Android Jetpack > AAC' 카테고리의 다른 글

데이터 바인딩 - Repository pattern 적용해보기.  (0) 2023.02.16
DataBinding 과 BindingApdater  (0) 2023.01.16
ViewModel 과 LiveData  (0) 2023.01.12
뷰 바인딩 ViewBinding 사용법  (0) 2022.12.13