私のアプリケーションでは、クラスメンバーの値、たとえば、をデフォルト値の。に初期化するaSpinner
があります。次に、ユーザーはの値を変更する手順を実行できます。の値を保存し、で復元しています。ただし、明らかに、の復元の結果として、が呼び出されてゼロに戻ります。ユーザーが入力した値を保持したい。onItemSelected
a
0
a
a
onSaveInstanceState
onRestoreInstanceState
Spinner
onItemSelected
a
ただし、の古い値は、 (したがって、アイテムの選択時にゼロにする)a
の他の設定では意味がないことに注意してください。Spinner
残念ながら、それを検証することも困難です。したがって、への呼び出しonItemSelected
が偽物であることを知らずにa
、ゼロにすることは避けられません。
問題は、入力イベントハンドラーがキューに入れられ、 /が終了した後 に呼び出されるように見えることです(2回、これは私が理解していないもう1つのことです)。したがって、私の質問は、保存されたインスタンスの状態からデフォルト以外の値に復元する必要があるのはいつですか?どういうわけか、このタスクを入力イベントキューの最後に配置する必要がありますか?または、呼び出しが実際のユーザー入力の結果として発生したのか、インスタンス状態の復元のみの結果として発生したのかを区別する方法はありますか?onCreate
onRestoreInstanceState
a
onItemSelected
コード例:
private String KEY = "(...).A";
private int a;
public void onItemSelected(AdapterView<?> parentView, View childView, int position, long id) {
/* other important stuff */
a = 0;
Log.d("info", "a zeroed");
}
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putInt(KEY, a);
}
public void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
a = state.getInt(KEY, a);
Log.d("info", "a restored");
}
向きを変えた後、ログには
info a restored
info a zeroed
info a zeroed