获取有关RestoreInstaceState的所有View对象

时间:2017-12-23 18:11:39

标签: 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");
    }

我正在尝试恢复方向更改的观点,并通过本文

https://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-1/

但遗憾的是,上面提到的方法返回了一组空键值。我错过了什么?

修改

我提供的文章说当发生onSaveInstanceState()回调时保存当前视图

1 个答案:

答案 0 :(得分:0)

Android标准视图有自己的保存状态机制。他们使用View#onSaveInstanceState()View#onRestoreInstanceState()

要使其工作,视图必须具有通过XML android:idView#setID()设置的ID,该ID必须大于0。

除非你有自定义视图(你自己的类扩展任何Android视图),否则你不需要自己处理。

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