@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("time",startTime);
Log.i("myTest","onSaveInstanceState");
}
private String TAG = "myTest";
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Bundle viewHierarchy = savedInstanceState.getBundle("android:viewHierarchyState");
if (viewHierarchy != null) {
SparseArray views = viewHierarchy.getSparseParcelableArray("android:views");
if (views != null) {
for (int i = 0; i < views.size(); i++) {
Log.v(TAG, "key -->" + views.get(i));
Log.v(TAG, "value --> " + views.valueAt(i));
}
}
} else {
Log.v(TAG, "no view data");
}
Log.v(TAG, "Inside of onRestoreInstanceState");
}
我正在尝试恢复方向更改的观点,并通过本文
https://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-1/
但遗憾的是,上面提到的方法返回了一组空键值。我错过了什么?
修改
我提供的文章说当发生onSaveInstanceState()回调时保存当前视图
答案 0 :(得分:0)
Android标准视图有自己的保存状态机制。他们使用View#onSaveInstanceState()和View#onRestoreInstanceState()
要使其工作,视图必须具有通过XML android:id
或View#setID()
设置的ID,该ID必须大于0。
除非你有自定义视图(你自己的类扩展任何Android视图),否则你不需要自己处理。
但是,可以使用Activity的onSaveInstanceState,onRestoreInstanceState,以防需要存储特殊值以便在配置更改后继续使用。