在 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);
    }
}