在我的应用程序中,我有一个将类成员的值(比如 )初始化Spinner
为其默认值。然后,用户可以执行步骤来更改 的值。我正在保存in的值并将其恢复为. 但是,显然由于恢复了,它被调用并归零。我希望保留用户输入的值。onItemSelected
a
0
a
a
onSaveInstanceState
onRestoreInstanceState
Spinner
onItemSelected
a
但是请注意,旧值a
在 的任何其他设置中都没有意义Spinner
(因此在选择项目时将其归零)。不幸的是,它也很难验证。因此,不知道调用onItemSelected
是假的,将a
其归零是不可避免的。
问题是输入事件处理程序似乎被放入某个队列并在 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