반응형
코틀린에서 ViewModel를 만들 때 아래와 같이 ViewModelProvider를 사용해서 만듭니다.
viewModel = ViewModelProvider(this)[TodoViewModel::class.java]
하지만 위 같은 형식은 TodoViewModel에 파라미터를 넘기지 못하죠 그럴 땐 아래와 같이
ViewModelFactory를 생성해줍시다.
저는 TodoViewModel에 String으로 yyyy-mm-dd 형태의 값을 넘기려 하기에 아래처럼 만들어 줍시다.
class ViewModelFactory(date: String?): ViewModelProvider.Factory {
private var date: String? = null
init {
this.date = date
}
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if(modelClass.isAssignableFrom(TodoViewModel::class.java)){
return TodoViewModel(date) as T
}
throw IllegalArgumentException("뷰모델을 만들 수 없습니다 : IllegalArgumentException")
}
}
이제 맨 처음 VIewModelProvider 부분을 수정해줍시다.
todoViewModel = ViewModelProvider(this)[TodoViewModel::class.java]
=>
todoViewModel = ViewModelProvider(this, ViewModelFactory("2022-10-21")).get(TodoViewModel::class.java)
이해를 돕기 위해 아래는 제가 만든 TodoVIewModel에 대한 코드입니다.
이제 해당 클래스에서 date 파라미터로 "2022-10-21"을 받을 수 있게 된 것입니다.
class TodoViewModel(date: String?) : ViewModel() {
val todoList: LiveData<MutableList<TodoDao.TodoHistory>>
private val todoRepository: TodoRepository = TodoRepository.get()
init {
todoList = if (date == null){
todoRepository.list()
} else{
todoRepository.listOnDate(date)
}
}
}
코드 적용시 자료형이나 ViewModel은 상황에 맞게 수정하면 잘 작동할 것 입니다.
궁금한 점이나 틀린 부분에 대한 질문은 언제나 환영입니다.
반응형
'Android Kotlin > Study' 카테고리의 다른 글
[Android Studio] 에뮬레이터 한글 자판 사용하기 (0) | 2022.10.21 |
---|---|
[Android Studio] MD 확장자 프리뷰 켜기 (0) | 2022.10.21 |
[Kotlin] 코틀린을 쓰는 이유 (0) | 2022.09.26 |