Proper way of sending large amount of data from View to ViewModel
I am working on a simple drawing app for Android. I have a custom view on which the user can draw. This means that a lot of data (a list of points) is generated in this View.
I want to store this data in the
If I need to update a
View after something changes in the
ViewModel, I can just use
LiveData in the
ViewModel and put an observer in the
However, what I need is the other direction: changes in the
View should lead to an update of the data in the
What I've learnt so far
I can use
MutableLiveData for this, however, it is unclear to me what the right way is to give the
View access to the
I can access a
ViewModel from an
Activity, by calling:
viewModel = new ViewModelProvider(this).get(MyViewModel.class);
But, I cannot access the
ViewModel from the View.
ViewModelProvider takes a
ViewModelStoreOwner as its parameter. An
Activity is a
ViewModelStoreOwner, but a
View is not.
I believe this is intentional, otherwise the
View would be a
ViewModelStoreOwner itself. I could pass a reference to the
Activity or the
ViewModel itself to the
View, but this feels wrong.
It seems that I need to use
MutableLiveData. I could then use
postValue on the
MutableLiveData whenever the
View has more data to send.
However, that just shifts the problem: how should the
View get access to the
What I've tried
For now, I have a workaround.
I have created an interface
ListOfPoints that is implemented by the
View has a method
setPointsOwner(ListOfPoints) . So, effectively, the
View still gets a reference to the
Activity, but can only use it to manipulate the data. The implementation of the interface, inside the
Activity, then updates the
MutableLiveData it gets from the
This works, but still feels wrong.
How can I send a lot of data from a
View to a
Is it proper coding style to give the
View access to
MutableLiveData from the owning
Or is there a way in which I can make the
ViewModel observe the
View, without letting it have a direct reference to the