반응형
Notice
Recent Posts
Recent Comments
Link
불로구
안드로이드 스튜디오 - DataBinding & LiveData 본문
반응형
LiveData란?
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"
}
}
반응형
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 안전하게 암호화 하기 (0) | 2021.11.01 |
---|---|
안드로이드 스튜디오 - 내장 데이터베이스 ROOM (0) | 2021.04.04 |
안드로이드 스튜디오 - 계산기 만들기(실수, 타이머) (0) | 2020.06.15 |
Comments