LiveData 실습
먼저 LiveData를 사용하기 위해서는 라이브러리를 추가해주어야한다.
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.4.0")
class LiveDataActivity : AppCompatActivity() {
private var count = 0
var mutableLiveText = MutableLiveData<String>() // livedata는 불변하기 때문에 갱신할 수 없다 하지만 mutablelivedata는 livedate를 상속받아 변경가능
val liveText : LiveData<String>
get()=mutableLiveText
lateinit var binding : ActivityLiveBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_live)
//lifecyclerowner를 첫번째 인자로 전달합니다. 이를 통해 livedata에 lifecycle소유자와 바인딩
// LiveData를 Observer를 이용해 관찰하고 현재 Activity 및 Observer를 LifeCyclerOwner로 전달
liveText.observe(this, Observer{// observe 메소드를 통해 Observer 붙일 수 있음
binding.textTest.text = it
})
binding.btnChange.setOnClickListener{
mutableLiveText.value = "LiveData Test ${++count}"
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".livedata.LiveDataActivity">
<TextView
android:id="@+id/text_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="LiveData Test"
android:textSize="25sp"
app:layout_constraintBottom_toTopOf="@id/btn_change"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<Button
android:id="@+id/btn_change"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+ 1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_test" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>