Johans Bormman
Johans Bormman

Reputation: 905

How to initialize a class and pass an object to the constructor in Android?

I have the following class:

public class MovieViewModel extends ViewModel {
    private String query;

    public MovieViewModel() {
        MyFactory factory = new MyFactory(); //Pass the query in the constructor
        //other stuff
    }
}

And in my MainActivity, I'm creating an object of this class like this:

MovieViewModel model = ViewModelProviders.of(this).get(MovieViewModel.class);

How can I create an object of MovieViewModel class and in the same time I initialize the query String so it can be passed to the MyFactory constructor?

Upvotes: 0

Views: 1833

Answers (2)

koleanu
koleanu

Reputation: 495

You have to provide a factory class :

public class MovieViewModel extends ViewModel {
    private String query;

    MovieViewModel(String objectToBePassed) {
        //other stuff
    }

    static class MovieViewModelFactory extends ViewModelProvider.NewInstanceFactory {
        private String mObject;

        public MovieViewModelFactory(String objectToBePassed) {
            mObject = objectToBePassed;
        }

        @NonNull
        @Override
        public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
            return (T) new MovieViewModel(mObject);
        }
    }
}

and usage

ViewModelProviders.of(context,
            new MovieViewModel.MovieViewModelFactory(object))
            .get(MovieViewModel.class);

Upvotes: 1

Khemraj Sharma
Khemraj Sharma

Reputation: 58934

You can create custom Factory.

public class MovieViewModelFactory implements ViewModelProvider.Factory {
    private Application mApplication;
    private String mParam;


    public MovieViewModelFactory(Application application, String param) {
        mApplication = application;
        mParam = param;
    }


    @Override
    public <T extends ViewModel> T create(Class<T> modelClass) {
        return (T) new MovieViewModel(mApplication, mParam);
    }
}

Now you can use like this

MovieViewModel movieViewModel = ViewModelProviders.of(this, new MovieViewModelFactory(this.getApplication(), "param")).get(MovieViewModel.class);

Upvotes: 1

Related Questions