CodeBlanks Logo Icon CodeBlanks

by viewModel

Learn ViewModel injection with by viewModel().

What is by viewModel?

by viewModel() is the Koin delegate used to get a ViewModel inside an Activity or Fragment. It works with AndroidX ViewModel.

Example: class MyActivity : AppCompatActivity() { val vm: MyViewModel by viewModel() }. This delegate ties the ViewModel to the Activity lifecycle. When the screen rotates, the ViewModel survives; the new Activity gets the same ViewModel. viewModel is also used in module declarations: viewModel { MyViewModel(get()) }. This lets the ViewModel receive dependencies through Koin.

The viewModel module declaration

To add a ViewModel to a Koin module use viewModel { ... }. This is preferred over single or factory for ViewModels.

Example: module { viewModel { MyViewModel(get()) } }. Here MyViewModel receives other dependencies via get(). The viewModel block ties the ViewModel to the lifecycle. Koin manages the ViewModel lifecycle in line with AndroidX. This prevents memory leaks.

Practice Define a class with by viewModel

Define class MyViewModel. Define class MyActivity with val vm: MyViewModel by viewModel() inside. In main, print println("ViewModel ready").

Starter code

Main.kt
// viewModel delegate
// write here
import org.koin.androidx.viewmodel.ext.android.viewModel

fun main() {
    
}

Sample solution

Main.kt
class MyViewModel

class MyActivity {
    val vm: MyViewModel by viewModel()
}

fun main() {
    println("ViewModel ready")
}

Expected output

ViewModel ready

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 Complete the by viewModel call

Question
class MyActivity : AppCompatActivity() {
    val vm: MyViewModel ____()
}
Answer
class MyActivity : AppCompatActivity() {
    val vm: MyViewModel by viewModel()
}

Explanation: by viewModel() fetches the ViewModel.

2 When is by viewModel() preferred?

  • To make an HTTP request
  • For a database connection
  • To serialize JSON
  • When getting a ViewModel in an Activity Correct answer

Explanation: by viewModel() is used to get a ViewModel.

3 Match by viewModel parts

Term Meaning
by viewModel ViewModel delegate
MyActivity Owning class
MyViewModel ViewModel
viewModel Module declaration

All lessons in Advanced