안드로이드 ViewModel과 LiveData를 이용한 간단한 observer예제
MVVM구조를 공부 중인데 observer를 배웠다.
스타크래프트 옵저버처럼 특정 데이터가 바뀌면 나한테 알려주는 애다.
다른 예제를 봤는데 observer를 람다식으로 만들고 했지만 나는 인터페이스를 상속받아서 하는 식으로 구현을 해보았다.
예제를 요약하자면 버튼을 누를때마다 ViewModel에 LiveData를 만들고
그 데이터에 옵저버를 달아서 값이 바뀔때마다 onChanged메소드가 호출되는 것을 확인해 볼 것이다.
뷰모델은 간단하게 LiveData만 가지게 해놨다.
이제 MainActivity에 가서 뷰모델과 옵저버를 설정해주자.
observer에 빨간줄이 뜰텐데 여기엔 옵저버를 넣어줘야한다.
나는 람다로 옵저버를 만드는 식이 아니라 onChanged를 오버라이드 해주기 위해서 observer인터페이스를 상속받을거다.
MainActivity에 Observer의 제네릭을 LiveData자료형과 같이 하고 상속받으면
빨간줄이 뜰 것이다.
클릭해서 onChanged메소드를 implement해준다.
이제 버튼이 눌릴때마다 라이브데이터를 바꾸는 로직이다.
전체코드
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
class MainActivity : AppCompatActivity(), Observer<String> {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
//프로바이더를 통해 뷰모델 가져오기
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
//뷰모델에 있는 LiveData의 값의 변경사항을 관찰 할 수 있는 옵저버를 설정한다.
viewModel.liveData.observe(this, this)
var i: Int = 0
binding.btnTest.setOnClickListener {
viewModel.liveData.postValue("$i")
i++
}
}
//LiveData가 바뀌면 호출됨.
override fun onChanged(t: String?) {
Log.e("test", "$t")
}
}
MainViewModel.kt
class MainViewModel:ViewModel() {
var liveData : MutableLiveData<String> = MutableLiveData<String>()
}
실행해서 Log값을 확인해보자
굿.
Author And Source
이 문제에 관하여(안드로이드 ViewModel과 LiveData를 이용한 간단한 observer예제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dooooreeee/안드로이드-ViewModel과-LiveData를-이용한-간단한-observer예제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)