我正在开发一个应用程序,在其中需要在ListView中显示建议,并且当方向改变时,我希望该列表被隐藏。但是它仍然会在屏幕上出现。我尝试了以下方法: 1)获取列表适配器并清除它。 2)在方向更改之前将可见性设置为GONE(但在onCreate后又变得可见) 3)在onCreate中将可见性设置为GONE,但列表仍然出现在屏幕上(我认为可能是因为Android保存了旧列表,因为我重新初始化了列表视图,看起来像是空的,但屏幕上的列表却不是)。那么,怎么能够摆脱这个列表呢?
我正在开发一个应用程序,在其中需要在ListView中显示建议,并且当方向改变时,我希望该列表被隐藏。但是它仍然会在屏幕上出现。我尝试了以下方法: 1)获取列表适配器并清除它。 2)在方向更改之前将可见性设置为GONE(但在onCreate后又变得可见) 3)在onCreate中将可见性设置为GONE,但列表仍然出现在屏幕上(我认为可能是因为Android保存了旧列表,因为我重新初始化了列表视图,看起来像是空的,但屏幕上的列表却不是)。那么,怎么能够摆脱这个列表呢?
不要使用像android:configChanges这样全局影响Activity中所有视图的方法,考虑使用setSaveEnabled(boolean)方法或其等效的xml属性android:saveEnabled?
控制是否启用此视图的状态保存(即其onSaveInstanceState()方法是否会被调用)。
如果将其设置为false,则每次更改方向时都应返回到默认状态,因为其状态将不会被保存。
例如,您可以将此代码放入布局文件中:
<ListView
....
android:visibility="invisible"
android:saveEnabled="false">
</ListView>
当您开始输入时,将可见性设置为VISIBLE。或者,如果您喜欢,可以将可见性和方法setSaveEnabled放在onCreate方法中。
我尝试使用一个简单的ListView和一个将可见性更改为true的按钮。旋转后,ListView变为不可见(其默认状态)
还要注意:
此标志仅可禁用此视图的保存;任何子视图可能仍需保存其状态。
因此,您应该在onStop()或其他适当的方法中清除列表,但即使您不这样做,ListView在旋转时仍将不可见
来源:
@Override
protected void onSaveInstanceState(Bundle outState) {
}
将此函数覆盖到您的活动中,不要调用“super”方法!
或在清单中指定方向:
<activity
android:name="com.blabla"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait" >
</activity>
当设备方向改变时,Android系统调用您的活动的onCreate()方法。如果您不想在设备方向改变时重新创建您的活动,请在清单文件中为您的活动条目添加configchanges。
<activity
android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation"
/>
View.setSaveEnabled (boolean enabled)
方法。 - Vladimir Mironov