Activity横竖屏切换和数据存储

本文介绍了如何在Android中配置Activity以实现横竖屏切换而不重新创建Activity实例,并讨论了如何使用onSaveInstanceState和onRestoreInstanceState来保存和恢复Activity状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Activity横竖屏切换

对于横竖屏切换,我们一般是在AndroidManifest.xml中对Activity的属性进行配置。
1)我们不希望屏幕旋转时重建,则需要对configChange属性做如下设置:
android:configChanges="orientation"
2)系统配置发生改变的时候Activity都会被重建,则需要对以下属性做如下设置:

用户插入外接键盘,运营商改变,界面模式(例如开启夜间模式)等都会导致Activity重建

locale:设备的本地位置发生了改变,例如切换了系统语言;
keyboard:键盘类型发生了改变,例如插入了外接键盘;
keyboardHidden:键盘的可访问性发生了改变,例如移除了外接键盘;

所以,最终固定竖屏的代码如下:
android:configChanges="keyboard|keyboardHidden|orientation"
另外,screenOrientation属性也可固定屏幕方向,需要做如下设置:
//android:screenOrientation="landscape"//限制此页面横屏显示
android:screenOrientation="portrait"//限制此页面竖屏显示

二、Activity的数据存储

数据存储方式有很多种,这里我们只说在Activity的生命周期中需要调用到的onSaveInstanceState和onRestoreInstanceState
当横竖屏切换时,Activity会被销毁重建,onPause,onStop,onDestory方法均会被调用,而onSaveInstanceState方法对Activity的状态进行保存,该方法在onStop之前调用,然后,当Activity被创建后,系统会调用onRestoreInstanceState,将之前onSaveInstanceState保存的数据Bundle传递给onRestoreInstanceState和onCreate方法
代码如下:
 @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState, outPersistentState);
        outState.putString("editText",myEdit.getText().toString());
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState, persistentState);
        String str = savedInstanceState.getString("editText");
        myEdit.setText(str);
    }
在onSaveInstanceState中保存需要存储的参数,然后再onRestoreInstanceState获取保存的数据并进行设置即可。
当横竖屏切换时,我们在onCreate(Bundle savedInstanceState)方法中判断Bundle 是否为Null,当Bundle不为null时对数据进行恢复(该调接口的调接口,该调方法的调方法,该初始化的初始化)。
protected void onCreate(Bundle saveInstanceState){
    if(savedInstanceState!=null){//Bundle 中的参数是onRestoreInstanceState中接收到的值
        String str =saveInstanceState.getString("editText");
    }
}

此篇,我们讲述Activity中的横竖屏切换中的数据存储,如有不妥之处,欢迎留言!!!

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值