@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");
}
我试图恢复方向变化时的 View ,并阅读了这篇文章
https://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-1/
但遗憾的是,上面提到的方法返回一组空键值。我错过了什么?
编辑
我提供的文章说,当 onSaveInstanceState() 回调发生时,当前 View 被保存
最佳答案
Android 标准 View 有自己的状态保存机制。他们使用View#onSaveInstanceState()和 View#onRestoreInstanceState()
为此, View 必须具有通过 XML android:id
或 View#setID()
设置的 ID,该 ID 必须大于 0。
除非您有自定义 View (您自己的扩展任何 Android View 的类),否则您不需要自己处理此问题。
但是,如果您需要存储特殊值以便在配置更改后继续存在,则可以使用 Activity 的 onSaveInstanceState、onRestoreInstanceState。
关于java - 在RestoreInstanceState上获取所有View对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954827/