0% found this document useful (0 votes)
129 views1 page

Viewmodel Apis Cheatsheet

This document provides a cheat sheet for the ViewModel APIs in Jetpack. It lists the artifacts where the APIs can be found, the scope of the returned ViewModel instance, and examples of how to use each API. The APIs allow getting ViewModel instances scoped to activities, fragments, navigation graphs, and other custom owners.

Uploaded by

Gaston Cocce
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
129 views1 page

Viewmodel Apis Cheatsheet

This document provides a cheat sheet for the ViewModel APIs in Jetpack. It lists the artifacts where the APIs can be found, the scope of the returned ViewModel instance, and examples of how to use each API. The APIs allow getting ViewModel instances scoped to activities, fragments, navigation graphs, and other custom owners.

Uploaded by

Gaston Cocce
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 1

ViewModel APIs cheat sheet

The APIs and artifacts listed in this page follow this template

Library - artifact
v1.0 by @AndroidDev
ViewModel API Scope of the returned ViewModel instance
This cheat sheet lists the ViewModel APIs in Jetpack. It includes Example code
the artifact where they can be found, the scope of the returned
ViewModel instance, and an example of how to use them.

You can scope ViewModel instances to a ViewModelStoreOwner.


The owner can be an Activity, Fragment, Navigation graph, a Get an instance in an Activity
destination of a Navigation graph, or your own custom owner.

Activity - activity.activity-ktx
For more use cases and to learn about ViewModel factories:

goo.gle/architecture-viewmodel
by viewModels() Activity (ViewModelStoreOwner)

val vm: MyViewModel by viewModels()

Get an instance in Jetpack Compose


Compose - lifecycle.lifecycle-viewmodel-compose
Get an instance in a Fragment
= viewModel() closest ViewModelStoreOwner
Fragment - fragment.fragment-ktx
@Composable

fun MyScreen(vm: ViewModel = viewModel()) { ... }


by viewModels() Fragment (ViewModelStoreOwner)

val vm: MyViewModel by viewModels()

= viewModel(vmStoreOwner) any ViewModelStoreOwner

// Example of getting a ParentViewModel instance scoped to the Navigation graph

composable("myScreen") { backStackEntry ->


by viewModels(ownerProducer) any ViewModelStoreOwner
val parentEntry = remember(backStackEntry) {

navController.getBackStackEntry("parentNavigationRoute")
// Example of getting a SharedViewModel instance scoped to the parent Fragment

}
val vm: SharedViewModel by viewModels(ownerProducer = { requireParentFragment() })
val parentViewModel = viewModel<ParentViewModel>(parentEntry)

...

by activityViewModels() Activity (ViewModelStoreOwner)

val vm: SharedViewModel by activityViewModels()


Compose + Navigation + Hilt - hilt.hilt-navigation-compose
When using Hilt and Navigation together, use this API instead of viewModel()

= hiltViewModel() closest ViewModelStoreOwner


Fragment + Navigation - navigation.navigation-fragment

@Composable
by navGraphViewModels(graphId) NavGraph (ViewModelStoreOwner)
fun MyScreen(vm: ViewModel = hiltViewModel()) { ... }
val vm: SharedViewModel by navGraphViewModels(R.id.nav_graph)

Fragment + Navigation + Hilt - hilt.hilt-navigation-fragment


Core ViewModel API When using Hilt and Navigation together, use this API instead of navGraphViewModels(). To get
an instance not scoped to a NavGraph, you can keep using viewModels() or
ViewModel - lifecycle:lifecycle-viewmodel-ktx activityViewModels().

ViewModelProvider by hiltNavGraphViewModels(graphId) NavGraph (ViewModelStoreOwner)


any ViewModelStoreOwner

val vm = ViewModelProvider(anyViewModelStoreOwner)[MyViewModel::class.java] val vm: SharedViewModel by hiltNavGraphViewModels(R.id.nav_graph)

You might also like