DataBinding 사용법
2023. 1. 12. 02:16ㆍAndroid 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 |