我正在开发应用程序,我需要在 ListView 中显示建议,并且当方向改变时,我希望隐藏该列表。但它无论如何都会出现在屏幕上。我试过这个:1)获取列表适配器并清除它。2)在方向改变之前设置可见性 GONE(但在 onCreate 后再次可见) 3)在 onCreate 中设置可见性 GONE,但列表仍然出现在屏幕上(我认为可能是 android 保存了旧列表,因为我再次初始化列表视图和它看起来像空的,但屏幕上的列表不是)。那么,我怎样才能摆脱列表呢?
3 回答
与其使用像android:configChanges这样影响 Activity 中所有视图的全局变量,不如使用setSaveEnabled(boolean)方法 或等效的 xml 属性 android:saveEnabled 呢?
控制是否启用保存此视图的状态(即是否会调用其 onSaveInstanceState() 方法)。
如果将其设置为 false,则在更改方向时应始终返回默认状态,因为不会保存其状态。
例如,您可以将其放入布局文件中:
<ListView
....
android:visibility="invisible"
android:saveEnabled="false">
</ListView>
然后在您开始输入时将可见性设置为可见。或者,如果您更喜欢将可见性和方法setSaveEnabled放在 onCreate 方法中。
我尝试了一个简单的 ListView 和一个将可见性更改为 true 的 Button。旋转时,ListView 变得不可见(它的默认状态)
另请注意:
该标志只能禁用该视图的保存;任何子视图可能仍保存其状态。
所以你应该在 onStop() 或任何你想要的方法期间清除列表,但即使你不这样做,ListView 在旋转时仍然不可见
资源:
@Override
protected void onSaveInstanceState(Bundle outState) {
}
将此函数覆盖到您的活动中,而不是调用“超级”方法!
或在清单中指定方向:
<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"
/>