整数を永続化するために使用される SeekBar を持つ独自のカスタム DialogPreference サブクラスを実装しています。onSaveInstanceState()
とに何を入れる必要があるかについて少し混乱していますonRestoreInstanceState()
。具体的には、ユーザーが操作する UI ウィジェット (私の場合は SeekBar ウィジェット) を更新する必要がありますonRestoreInstanceState()
か?
私が混乱している理由は、ここの API doc 記事で、これを行うように指示されているためです。
@Override
protected Parcelable onSaveInstanceState() {
final Parcelable superState = super.onSaveInstanceState();
if (isPersistent()) {
return superState;
}
final SavedState myState = new SavedState(superState);
myState.value = mNewValue; //<------------ saves mNewValue
return myState;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (state == null || !state.getClass().equals(SavedState.class)) {
super.onRestoreInstanceState(state);
return;
}
SavedState myState = (SavedState) state;
super.onRestoreInstanceState(myState.getSuperState());
mNumberPicker.setValue(myState.value); //<------------ updates the UI widget, not mNewValue!
}
しかし、いくつかの公式の Android Preference クラス ( EditTextPreferenceおよびListPreference ) のソースを見ると、UI ウィジェットは で更新されていませんonRestoreInstanceState()
。Preference の基になる値のみが (上記の例では、 になりますmNewValue
)。
EditTextPreference の関連ソースは次のとおりです。
@Override
protected Parcelable onSaveInstanceState() {
final Parcelable superState = super.onSaveInstanceState();
if (isPersistent()) {
return superState;
}
final SavedState myState = new SavedState(superState);
myState.value = getValue(); //<---- saves mValue
return myState;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (state == null || !state.getClass().equals(SavedState.class)) {
super.onRestoreInstanceState(state);
return;
}
SavedState myState = (SavedState) state;
super.onRestoreInstanceState(myState.getSuperState());
setValue(myState.value); //<---- updates mValue, NOT the UI widget!
}
それで、コンセンサスは何ですか?UIウィジェットをどこで更新することになっていますか(まったく更新することになっている場合...)?