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

12

我正在开发一个应用程序,在其中需要在ListView中显示建议,并且当方向改变时,我希望该列表被隐藏。但是它仍然会在屏幕上出现。我尝试了以下方法: 1)获取列表适配器并清除它。 2)在方向更改之前将可见性设置为GONE(但在onCreate后又变得可见) 3)在onCreate中将可见性设置为GONE,但列表仍然出现在屏幕上(我认为可能是因为Android保存了旧列表,因为我重新初始化了列表视图,看起来像是空的,但屏幕上的列表却不是)。那么,怎么能够摆脱这个列表呢?


4
请看View.setSaveEnabled (boolean enabled)方法。 - Vladimir Mironov
我曾经遇到过与BottomNavigationView项目选择相关的类似问题,我重新创建了活动以重置语言,但底部导航仍然保留了先前的项目选择。接受的答案对我有用。 - Abir Hasan Shawon
3个回答

24

不要使用像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在旋转时仍将不可见

来源:


1
@Override
protected void onSaveInstanceState(Bundle outState) {
}

将此函数覆盖到您的活动中,不要调用“super”方法!

或在清单中指定方向:

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

1

当设备方向改变时,Android系统调用您的活动的onCreate()方法。如果您不想在设备方向改变时重新创建您的活动,请在清单文件中为您的活动条目添加configchanges。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接