1. Android MVVM
2. AAC의 핵심 요소를 사용해서 개발시 전체적인 구조
1) Activity / Fragment : View
2) ViewModel : View와 Model을 분리
3) Repository : 데이터 처리
1. ViewModel
2. ViewModel 사용 방법
1) build.gradle 추가
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
2) ViewModel 상속으로 작성
class MyViewModel: ViewModel() {
val user: MutableLiveData<User>
get() {
val user = MutableLiveData<User>()
user.postValue(User("gildong", "hong1"))
return user
}
}
3) Activity에서 ViewModel 이용
val model = ViewModelProvider(this).get(MyViewModel::class.java)
model.user.observe(this, {
binding.textView.text = "${it.firstName} - ${it.lasgName}"
})
implementation "androidx.activity:activity-ktx:$activity_version"
val model: MyViewModel by viewModels()
3. ViewModel Lifecycle
4. AndroidViewModel
5. Fragment에서 ViewModel 이용
val model = ViewModelProvider(requireActivity()).get(MyFragmentViewModel::class.java)
1. LiveData
class MyViewModel: ViewModel() {
// String 데이터 리턴, 뷰가 결과값이 넘어올 때까지 대기 상태에 빠짐
fun someData(): String {
return "hello"
}
// livedata 리턴, 비동기적으로 데이터를 받을 수 있음
fun someData2(): MutableLiveData<String> {
val liveData = MutableLiveData<String>()
thread {
SystemClock.sleep(3000)
liveData.postValue("world")
}
return liveData
}
}
2. Observer
val observer = object : Observer<String> {
override fun onChanged(t: String?) {
Log.d("min", "onChanged... $t")
}
}
model.someData2().observe(this, observer)
val liveData = model.someData2()
...
liveData.removeObservers(this)
3. Custom LiveData
class MyLiveData: LiveData<String>() {
fun sayHello(name: String) {
postValue("Hello $name")
}
}
val liveData1 = MyLiveData()
liveData1.observe(this) {
Log.d("min", "result : $it")
}
liveData1.sayHello("min")