Search code examples
javaandroidkotlinmvvmandroid-viewmodel

How can I retrieve a ViewModel associated with an Activity from a custom view?


I can manage to retrieve a ViewModel associated with a Fragment but not with an Activity.

This works :

-Fragment-

private val mainViewModel: MainViewModel by viewModels()

-Custom View-

private val mainViewModel by lazy {
    ViewModelProvider(findViewTreeViewModelStoreOwner()!!).get<MainViewModel>()
}

But not that :

-Fragment-

private val mainViewModel: MainViewModel by activityViewModels()

-Custom View-

private val mainViewModel by lazy {
    ViewModelProvider(findViewTreeViewModelStoreOwner()!!).get<MainViewModel>()
}

Solution

  • I solved this problem by casting the Activity of the custom View to ViewModelStoreOwner and getting a ViewModel from ViewModelProvider created with this Activity :

    private val mainViewModel by lazy {
        ViewModelProvider(context as ViewModelStoreOwner).get<MainViewModel>()
    }