У меня есть одно задание и несколько фрагментов.
Активность:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
performInjection();
performDataBinding();
}
private void performDataBinding() {
viewDataBinding = DataBindingUtil.setContentView(this, setLayoutId());
this.viewModel = viewModel == null ? onCreateViewModel() : viewModel;
viewDataBinding.setVariable(setBindingVariable(), viewModel);
viewDataBinding.executePendingBindings();
}
@Override
public MainViewModel onCreateViewModel() {
return ViewModelProviders.of(this, viewModelFactory).get(MainViewModel.class);
}
Инъекция DI:
@Provides
ViewModelProvider.Factory mainViewModelProvider(MainViewModel mainViewModel) {
return new ViewModelProviderFactory<>(mainViewModel);
}
Код фрагмента:
@Override
public BalanceViewModel setViewModel() {
return ViewModelProviders.of(this, viewModelFactory).get(BalanceViewModel.class);
}
И запись при изменении ориентации:
D/BalanceViewModel: Recreation / constructor
D/MainViewModel: Recreation / constructor
D/BalanceViewModel: Recreation / constructor
D/BalanceViewModel: Recreation / onCleared
Итак, мой вопрос: почему viewModels вызывает конструктор каждый раз, когда я меняю ориентацию?Это связано с DI или нет?