public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState){
viewModel=new ViewModelProvider(this).get(MyViewModel.class);
}
메인스레드에서 뷰모델 생성 시 뷰모델 인스턴스가 생성되지 않아 발생했다. 이 문제는 AndroidViewModel을 상속한 뷰모델을 사용하는 경우, ViewModelProvider()에 파라미터로 Factory 객체를 넘겨주지 않아서 ViewModel이 제대로 인스턴스화 되지 못한 것이다.
public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
this(owner.getViewModelStore(), factory);
} -> 파라미터로 ViewModelStoreOwner와 Factory 객체를 받음
뷰모델 인스턴스 생성 시 넘겨줄 Factory 객체를 생성한다.
public class ViewModelFactory implements ViewModelProvider.Factory {
private Application application;
public ViewModelFactory(Application application){
this.application = application;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new ViewModel(application);
}
}
viewModel = new ViewModelProvider(this, new ViewModelFactory(getActivity().getApplication())).get(ViewModel.class);