java - 在RestoreInstanceState上获取所有View对象

标签 java android

@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:idView#setID() 设置的 ID,该 ID 必须大于 0。

除非您有自定义 View (您自己的扩展任何 Android View 的类),否则您不需要自己处理此问题。

但是,如果您需要存储特殊值以便在配置更改后继续存在,则可以使用 Activity 的 onSaveInstanceState、onRestoreInstanceState。

关于java - 在RestoreInstanceState上获取所有View对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954827/

相关文章:

java - 任务 ':signMavenJavaPublication' 执行失败。 > java.lang.NullPointerException(无错误消息)

android - 在我的 native react 代码中,keyboardavoiding View 不起作用

android - 在多边形上找到离用户位置最近的点

android - 即使操作栏中有空间,按钮也会折叠

Java拆分输入

java - 计数结果错误

java - 填写现有字段后添加 "New"字段

java - 这是否意味着应用程序的内存使用量与应用程序的大小相同

android - Camera.takePicture 抛出 RunTimeException

android - 为什么 Flutter Build Apk 和 Flutter 安装在 Release 上不起作用