ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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에서 옵져빙해야한다.

     

     

     

     

     

    댓글

Designed by Tistory.