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)


    }
}
 

실행 결과:

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