'un alt sınıflarını ViewModelProviders
kullanarak başlatırken, varsayılan olarak UserModel
sınıfınızın sıfır bağımsız değişken yapıcısına sahip olmasını bekler. Yapıcınızda sizin durumda size ViewModel sınıf için olmayan bir sıfır argüman yapıcı sahip olmak istiyorsanız Aksi takdirde UserModel
için varsayılan hiçbir arg yapıcı olması argüman Bunu düzeltmek için MutableLiveData<User> user
Tek yön hal almıştır ki, sizi ViewModelProvider.Factory
arabirimini uygulayacak olan ViewModel örneğinizi başlatmak için özel bir ViewModelFactory
sınıfı oluşturmanız gerekebilir.
Bunu henüz denemedim, ancak işte bunun için google'dan mükemmel örnekle bağlantı: github.com/googlesamples/android-architecture-components. Özellikle ViewModelModule
public class ViewModelFactory implements ViewModelProvider.Factory {
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> viewModels;
@Inject
public ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> viewModels) {
this.viewModels = viewModels;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
Provider<ViewModel> viewModelProvider = viewModels.get(modelClass);
if (viewModelProvider == null) {
throw new IllegalArgumentException("model class " + modelClass + " not found");
}
return (T) viewModelProvider.get();
}
}
ViewModelModule
Map<Class<? extends ViewModel>, Provider<ViewModel>> viewModels
@Module
public abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(UserViewModel.class)
abstract ViewModel userViewModel(UserViewModel userViewModel);
//Others ViewModels
}
ViewModelKey
içine ViewModel sınıfları yerinden bağlanma sorumludur bize bir sağ ViewModel sağlayacak bu sınıfı GithubViewModelFactory.java
Tartışma gerekli tüm bağımlılıkları ViewModel oluşturmak ve tatmin edebiliyoruz: https://www.reddit.com/ r/androiddev/yorum/6bw1jj/architecture_components_introduction_google_io_17 / –