在 AndroidViewModel 中保存实例状态
save instance state in AndroidViewModel
我正在学习为我的应用程序使用 MVVM,因此我必须使用 AndroidViewModel 而不是 ViewModel 来扩展我的视图模型,这样我就可以拥有应用程序上下文
存储库的东西,但这不是问题。
问题是我曾经在扩展 ViewModel
的视图模型的构造函数中使用 savedStateHandle
作为参数,如下所示:
public class MainViewModel extends ViewModel {
private static String SAVED_KEY_STARTED = "started";
private MutableLiveData<Boolean> isStarted;
SavedStateHandle savedState;
public MainViewModel(SavedStateHandle savedStateHandle){
savedState = savedStateHandle;
isStarted = new MutableLiveData(Boolean.False);
if(savedStateHandle.contains(SAVED_KEY_STARTED)){
isStarted.setValue(savedStateHandle.get(SAVED_KEY_STARTED));
}
}
// some other getters setters that set values into `savedState` on the fly
...
}
现在,使用扩展 AndroidViewModel 的视图模型,构造函数不再具有此功能,而是仅传入应用程序上下文。如何使用 AndroidViewModel 保存和检索实例状态。
public class MainViewModel extends AndroidViewModel {
public MainViewModel(Application application){
}
}
已添加:
检索视图模型的代码
// im using this for a fragment within my main activity
viewModel =
new ViewModelProvider(requireActivity(),
ViewModelProvider
.AndroidViewModelFactory
.getInstance(requireActivity().getApplication())
).get(MainViewModel.class);
viewModel =
new ViewModelProvider(requireActivity()).get(MainViewModel.class);
public class MainViewModel extends AndroidViewModel {
public MainViewModel(Application application, SavedStateHandle savedStateHandle){
super(Application application);
}
}
我正在学习为我的应用程序使用 MVVM,因此我必须使用 AndroidViewModel 而不是 ViewModel 来扩展我的视图模型,这样我就可以拥有应用程序上下文 存储库的东西,但这不是问题。
问题是我曾经在扩展 ViewModel
的视图模型的构造函数中使用 savedStateHandle
作为参数,如下所示:
public class MainViewModel extends ViewModel {
private static String SAVED_KEY_STARTED = "started";
private MutableLiveData<Boolean> isStarted;
SavedStateHandle savedState;
public MainViewModel(SavedStateHandle savedStateHandle){
savedState = savedStateHandle;
isStarted = new MutableLiveData(Boolean.False);
if(savedStateHandle.contains(SAVED_KEY_STARTED)){
isStarted.setValue(savedStateHandle.get(SAVED_KEY_STARTED));
}
}
// some other getters setters that set values into `savedState` on the fly
...
}
现在,使用扩展 AndroidViewModel 的视图模型,构造函数不再具有此功能,而是仅传入应用程序上下文。如何使用 AndroidViewModel 保存和检索实例状态。
public class MainViewModel extends AndroidViewModel {
public MainViewModel(Application application){
}
}
已添加:
检索视图模型的代码
// im using this for a fragment within my main activity
viewModel =
new ViewModelProvider(requireActivity(),
ViewModelProvider
.AndroidViewModelFactory
.getInstance(requireActivity().getApplication())
).get(MainViewModel.class);
viewModel =
new ViewModelProvider(requireActivity()).get(MainViewModel.class);
public class MainViewModel extends AndroidViewModel {
public MainViewModel(Application application, SavedStateHandle savedStateHandle){
super(Application application);
}
}