Изучив код, поймите, что мне просто нужно сохранить значение, как то, что @Parth упомянул в комментарии выше.
savedStateHandle.set(KEY, textLiveData.value)
Объяснение
Если мы посмотрим на set
из SavedStateHandle.java
@MainThread
public <T> void set(@NonNull String key, @Nullable T value) {
validateValue(value);
@SuppressWarnings("unchecked")
MutableLiveData<T> mutableLiveData = (MutableLiveData<T>) mLiveDatas.get(key);
if (mutableLiveData != null) {
// it will set value;
mutableLiveData.setValue(value);
} else {
mRegular.put(key, value);
}
}
Это показывает, что данные будут помещены в mutableLiveData
, который мы храним в mLiveDatas
, если таковой имеется.
Чтобы наши liveData были в mLiveDatas
, нам просто нужно использовать textLiveData = savedStateHandle.getLiveData(KEY)
в начале. Извлеките getLiveData
из SavedStateHandle.java
@NonNull
private <T> MutableLiveData<T> getLiveDataInternal(
@NonNull String key,
boolean hasInitialValue,
@Nullable T initialValue) {
MutableLiveData<T> liveData = (MutableLiveData<T>) mLiveDatas.get(key);
if (liveData != null) {
return liveData;
}
SavingStateLiveData<T> mutableLd;
// double hashing but null is valid value
if (mRegular.containsKey(key)) {
mutableLd = new SavingStateLiveData<>(this, key, (T) mRegular.get(key));
} else if (hasInitialValue) {
mutableLd = new SavingStateLiveData<>(this, key, initialValue);
} else {
mutableLd = new SavingStateLiveData<>(this, key);
}
mLiveDatas.put(key, mutableLd);
return mutableLd;
}
Он создаст его и поместит в mLiveDatas
, когда мы запросим его, если его еще нет.