Example ViewModel:
public class NameViewModel extends ViewModel {
// Create a LiveData with a String
private MutableLiveData mCurrentNa
Simply create the instance of your ViewModel, in this case NameViewModel
Your ViewModel Factory be like
class ViewModelFactory : ViewModelProvider.NewInstanceFactory() {
override fun create(modelClass: Class) =
with(modelClass){
when {
isAssignableFrom(NameViewModel::class.java) -> NameViewModel.getInstance()
else -> throw IllegalArgumentException("Unknown viewModel class $modelClass")
}
} as T
companion object {
private var instance : ViewModelFactory? = null
fun getInstance() =
instance ?: synchronized(ViewModelFactory::class.java){
instance ?: ViewModelFactory().also { instance = it }
}
}
}
And your ViewModel
class NameViewModel : ViewModel() {
//your liveData objects and many more...
companion object {
private var instance : NameViewModel? = null
fun getInstance() =
instance ?: synchronized(NameViewModel::class.java){
instance ?: NameViewModel().also { instance = it }
}
}
}
Now you can use ViewModelProviders to get the same instance of your ViewModel to use in any activity
ViewModelProviders.of(this, ViewModelFactory.getInstance()).get(NameViewModel::class.java)
OR
create an extension function for easier access
fun AppCompatActivity.getViewModel(viewModelClass: Class) =
ViewModelProviders.of(this, ViewModelFactory.getInstance()).get(viewModelClass)