android实现在横竖屏切换时页面信息不被重置的示例分享


在Android开发中,实现横竖屏切换时页面信息不被重置,主要涉及到Activity的生命周期管理和配置变更的处理。默认情况下,当设备方向改变时,Android会重启当前的Activity以匹配新的屏幕方向,这通常会导致数据丢失。为了避免这种情况,你可以通过修改`AndroidManifest.xml`中的Activity配置或重写Activity的`onConfigurationChanged`方法来实现。

以下是两种常用的方法来实现横竖屏切换时页面信息不被重置:

### 方法一:通过`AndroidManifest.xml`配置

在`AndroidManifest.xml`中,你可以为Activity设置`configChanges`属性,以指示Activity自行处理配置变更(如屏幕方向变化)。这样,当屏幕方向变化时,Activity不会被销毁并重新创建,而是会调用`onConfigurationChanged`方法。


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

注意:从Android 3.2(API级别13)开始,`screenSize`也被视为配置变更。如果你的应用目标是API级别13或更高,并且想要处理屏幕大小变化而不重启Activity,你也应该将`screenSize`添加到`configChanges`中。

然后,在你的Activity中重写`onConfigurationChanged`方法:


@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // 检查屏幕方向变化
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 现在是横屏
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        // 现在是竖屏
    }
    // 在这里更新UI或处理数据,以反映新的屏幕方向
}

### 方法二:使用ViewModel或Fragment保持数据

如果你不想处理配置变更,或者你的应用需要更复杂的生命周期管理,你可以使用ViewModel(适用于Jetpack库)或Fragment来存储和管理数据。ViewModel的生命周期独立于Activity的生命周期,即使Activity被销毁和重新创建,ViewModel中的数据也会保持不变。

使用ViewModel时,你可以将需要持久化的数据存储在ViewModel中,并通过Activity或Fragment中的ViewModel实例来访问这些数据。这样,无论Activity如何重启,数据都将保持不变。

请注意,上述代码和说明是基于Android SDK的通用实践。根据你的具体需求和应用架构,实现方式可能会有所不同。