ViewModelFactory
안드로이드 개발을 하면서 네트워크 통신을 하거나 localDB, room SQLite 등을 포함하여
데이터를 ViewModel로 넘겨주고 싶을 때 안드로이드 Factory클래스를 이용할 수 있다.
간단히 int형 숫자 하나를 전달하는 ViewModel을 만들어 테스트해보자.
class MainViewModel(num : Int) : ViewModel() {
init{
Log.d("MainViewModel" , num.toString())
}
숫자 하나를 받은 ViewModel 클래스이다.
이제 Factory클래스를 이용해 ViewModel에 원하는 파라메터를 넣어 생성하는 방법을 이용해보자!
class MainViewModelFactory(private val num : Int) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if(modelClass.isAssignableFrom(MainViewModel::class.java)){
return MainViewModel(num) as T
}
throw IllegalArgumentException("error")
}
}
액티비티에서 숫자하나를 Factory를 이용하여 MainViewModel에 넘겨주는 코드이다!
마지막으로 MainActivity에서 다음과 같이 코드를 작성해주면 끝!
class MainActivity : AppCompatActivity() {
lateinit var viewModel : MainViewModel
lateinit var viewModelFactory: MainViewModelFactory
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//값을 넘겨줌
viewModelFactory = MainViewModelFactory(5000)
viewModel = ViewModelProvider(this, viewModelFactory).get(MainViewModel::class.java)
}
}
5000이라는 값을 viewModelFactory를 통해 viewModel에 안정적으로 전달할 수 있게 되었다!!
'Android > JETPACK' 카테고리의 다른 글
[JETPACK개론] LiveData 와 MutableLiveData (0) | 2022.08.18 |
---|---|
[JETPACK개론] LiveData (0) | 2022.08.17 |
[JETPACK개론] Activity/Fragment 의 ViewModel 공유 (0) | 2022.08.12 |
[JETPACK개론] ViewModel ? (0) | 2022.08.11 |
[JETPACK개론] View,DataBinding + Adapter (0) | 2022.08.10 |