如何在Android中保存视图状态?

时间:2013-04-24 12:42:30

标签: android orientation state

我正在开发app,我需要在ListView中显示建议,当方向发生变化时,我希望隐藏该列表。但它无论如何都出现在屏幕上。我试过这个: 1)获取列表适配器并清除它。 2)在方向改变之前设置可见性GONE(但在onCreate之后再次可见) 3)在onCreate中设置可见性GONE,但列表仍然出现在屏幕上(我想也许android会保存旧列表,因为我再次初始化列表视图,它看起来像空,但屏幕上的列表不是)。 那么,我怎么能摆脱这个清单?

3 个答案:

答案 0 :(得分:17)

使用方法 setSaveEnabled(boolean)或等效的xml属性<而不是使用像 android:configChanges 这样影响Activity中所有视图的全局内容。 strong> android:saveEnabled ?

  

控制是否启用保存此视图的状态(即,是否将调用其onSaveInstanceState()方法。)

如果将其设置为false,则在更改方向时应始终返回默认状态,因为其状态将不会保存。

例如,您可以将其放在布局文件中:

<ListView
    ....
    android:visibility="invisible"
    android:saveEnabled="false">
</ListView>

然后在开始输入时将可见性设置为VISIBLE。或者,如果您更喜欢将可见性和方法 setSaveEnabled 放在onCreate方法中。

我尝试使用简单的ListView和Button将可见性更改为true。在轮换时,ListView变为invisibile(其默认状态)

另请注意:

  

此标志只能禁用此视图的保存;任何儿童观点仍可保存其状态。

所以你必须在onStop()或你想要的任何方法中清除列表,但即使你不这样做,ListView仍然在旋转时不可见

来源:

答案 1 :(得分:1)

@Override
protected void onSaveInstanceState(Bundle outState) {
}

将此功能覆盖到您的活动中,而不是调用“超级”方法!

或指定清单中的方向:

<activity
    android:name="com.blabla"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait" >
</activity>

答案 2 :(得分:1)

Android系统在设备的方向更改时调用其活动的onCreate()方法。如果您不想在方向更改

上再次创建活动,请将配置更改添加到清单中的活动条目
<activity
        android:name=".MyActivity"
        android:configChanges="keyboardHidden|orientation"
        />