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

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

而不是使用全局像android:configChanges影响在活动中的所有视图,怎么样使用方法setSaveEnabled(布尔)或等效的xml属性android:saveEnabled

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

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

例如,你可以把它放在布局文件中:

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

然后在开始input时将可见性设置为可见。 或者,如果您希望在onCreate方法中放置可见性和方法setSaveEnabled

我尝试了一个简单的ListView和一个button,将可见性更改为true。 在旋转的ListView成为invisibile(其默认状态)

另请注意:

这个标志只能禁止保存这个视图; 任何孩子的意见可能仍然保存着他们的状态。

所以你应该不得不在onStop()或任何你想要的方法清除列表,但如果你不这样做,ListView仍然是不可见的旋转

资源:

 @Override protected void onSaveInstanceState(Bundle outState) { } 

在你的活动中覆盖这个函数,而不是调用“超级”方法!

或者指定清单中的方向:

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

Android系统调用它的onCreate()方法来激活设备的方向转换。 如果您不想在方向更改中再次创build活动,请将configchanges添加到清单中的活动条目

 <activity android:name=".MyActivity" android:configChanges="keyboardHidden|orientation" />