Android/ViewModel
ViewModelFactory
${Harvey}
2022. 11. 21. 22:37
ViewModelFactory 는 네트워크 통신을 하거나 Repository, Local DB(ROOM or SQLite)와 연결을 하는 등에 사용된다.
MainViewModel.kt
import android.util.Log
import androidx.lifecycle.ViewModel
class MainViewModel(num:Int) : ViewModel() {
init{
//데이터 결과를 로고로 찍으려함.
Log.d("MainViewModel",num.toString())
}
}
MainViewModelFactory.kt
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("Unknown ViewModel Class")
}
}
처음 위 코드를 작성할때 Error가 났음.
gradle 파일에 아래의 코드를 추가하여 에러를 해결함.
build.gradle
kotlinOptions {
jvmTarget = '1.8'
//아래코드를 넣어야 ViewModelFactory에 오류가 나지않음.
freeCompilerArgs += [
"-Xjvm-default=all",
]
}
MainActivty.kt
//ViewModelFactory
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)
}
}
실행 결과:

로고에 데이터가 찍힌 모습.