12

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

4

3 回答 3

24

与其使用像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 在旋转时仍然不可见

资源:

于 2013-04-24T15:24:31.103 回答
1
@Override
protected void onSaveInstanceState(Bundle outState) {
}

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

或在清单中指定方向:

<activity
    android:name="com.blabla"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait" >
</activity>
于 2013-04-24T12:44:58.347 回答
1

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

<activity
        android:name=".MyActivity"
        android:configChanges="keyboardHidden|orientation"
        />
于 2013-04-24T12:46:32.703 回答