-
1-4. ViewModel에서 Model의 데이터를 Observing카테고리 없음 2021. 9. 14. 18:00
AndroidViewModelMemoList
import android.app.Application import android.util.Log import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer import com.project.memoapp.model.Memo import com.project.memoapp.model.RepositoryMemo class AndroidViewModelMemoList(application: Application) : AndroidViewModel(application) { val repositoryMemo: RepositoryMemo private var mutableLiveMemos: MutableLiveData<List<Memo>> = MutableLiveData() //RepositoryMemo 의 liveData가 변경될 때 받을 liveData var liveMemos: LiveData<List<Memo>> = mutableLiveMemos val observe: Observer<List<Memo>> init { printLog("initialization") repositoryMemo = RepositoryMemo(getApplication()) observe = object : Observer<List<Memo>> { override fun onChanged(t: List<Memo>) { this@AndroidViewModelMemoList.mutableLiveMemos.value = t } } repositoryMemo.liveMemos.observeForever(observe) //RepositoryMemo 의 liveData 옵져빙 } //repositoryMemo 조작 fun getAll() { repositoryMemo.querySelectAllDefault() } fun destroyMemoDatabase() { repositoryMemo.destroyDatabase() } override fun onCleared() { printLog("onCleared()") repositoryMemo.liveMemos.removeObserver(observe) //RepositoryMemo 의 liveData 옵져빙 해제 destroyMemoDatabase() } fun printLog(str: String) { Log.d("APPLICATIONTEST", "AndroidViewModelMemoList: $str") } }
Model의 LiveData를 통지받기위하여 Observer인터페이스를 구현하였다. onChanged는 변경된 데이터를 받아 작업할 내용을 기술한다. 기술한 내용을 보면 뷰모델의 라이브데이터에 다시 넣어주고 있다.
뷰모델에 일반 List가 아닌 라이브데이터 멤버를 선언한 이유는 View에게 이 값을 다시 통지해야하기 때문이다.
다음 포스팅의 내용에 해당되지만 이 뷰모델의 LiveData를 View에서 옵져빙해야한다.