Skip to content Skip to sidebar Skip to footer

How To Pass Custom Parameters To A Viewmodel Using Factory?

I am aware in order to pass custom parameters to ViewModel, we can use ViewModelProvider.NewInstanceFactory, Like this: // Factory Class class MyFactory extends ViewModelProvid

Solution 1:

I had this problem previously and I managed it by doing this. In your activity create your ViewModel factory as below :

//Inside MyActivity
ViewModelProvider.Factoryfactory=newViewModelProvider.Factory() {
            @NonNull@Overridepublic <T extendsViewModel> T create(@NonNull Class<T> modelClass) {
                return (T) newMyAndroidViewModel(getApplication(),
                        "My string!");
            }
        };

And then use it to create your ViewModel :

viewModel = ViewModelProviders.of(this, factory).get(MyAndroidViewModel.class); 

UPDATE:

As the ViewModelProviders class has been deprecated, the updated answer would be as below. The factory is the same as before, it has just changed to Kotlin.

var factory = object : ViewModelProvider.Factory {
        overridefun<T : ViewModel?>create(modelClass: Class<T>): T {
            return  SimpleAndroidViewModel(activity!!.application,
                "My string!") as T
        }
    }

However, the line where we were creating the ViewModel instance has changed and now we are using the ViewModelProvider class.

privateval viewModel: SimpleAndroidViewModel by lazy {
        ViewModelProvider(this, factory).get(SimpleAndroidViewModel::class.java)
    }

Post a Comment for "How To Pass Custom Parameters To A Viewmodel Using Factory?"