在activity加入属性android:configChanges="keyboardHidden|screenSize|orientation"

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

-----------------------------------


第一种:转屏时禁止当前activity销毁,不重新创建activity并调用onCreate()方法,办法是在 AndroidManifest.xml 文件中对 当前Activity 添加配置属性android:configChanges=”orientation|keyboardHidden”,既可以实现禁用,然后如果还想监听到转屏的动作,可以在当前Activity 内复写onConfigurationChanged() 方法,做一些操作。

第二种:在当前Activity中复写onSaveInstanceState(Bundle outState)方法,在此方法内,把Activity在销毁之前要保存的数据存入Bundle 中,然后在onCreate(Bundle savedInstanceState)savedInstanceState中,将存入的数据取出,或者不再onCreate取,复写onRestoreInstanceState()方法,在这里边取也可以,但要注意的是onSaveInstanceState()方法是在onPausse()之前调用,onRestoreInstanceState()是在onStart()之后调用,这样,也可以实现信息的延续,如下:

存入数据:

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);
outState.putInt("state",state);
}

取出数据:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if(savedInstanceState!=null){
state=savedInstanceState.getInt("state");
}



或者复写

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);

state=savedInstanceState.getInt("state");

}
第三种:禁止转屏,只允许横屏或者竖屏,方法:在 AndroidManifest.xml 文件中对当前Activity 添加配置属性 android:screenOrientation=”landscape” ,(landscape是横向,portrait是纵向),这样当然可以实现转屏时,数据保留的实现,可是,有些应用对于转屏是客户的正常的需求和体验,这个方法就不可取了。

上面三种方法,网上都有很多资料,我在此只是给大家梳理一下。下面,我就可能遇到的问题,可能是导致你最后无法实现的问题做一下补充。

重点来了,必看!!!
第一:其实android3.2以上的机器在按第一种方法设置是不起作用的,必须加上screenSize才行,即设置为这样android:configChanges=”orientation|screenSize|keyboardHidden”才会起作用,网上很少有告诉你这样设置的,很多都是像我说的第一种方法那样设置,结果你设置来设置去就是不起作用,抓破脑袋也想不出为什么。

第二:如果你的activity是TabWidget中的一个activity,那么就算你按上面的那样设置,同样还是不起作用,你必须在主Activity中添加上面的设置,才起作用,这个我在网上没有看到任何的文章有提示这个,是我自己试出来,如果你不知道的话,同样可能导致你抓破头皮也想不出来。唉。。。程序员真是个死脑细胞的活啊(题外话)。

好啦,如果你按照这样的设置,基本上,你的问题可以解决了,如果你的问题还是无法解决的话,可以留言一起探讨。

更多相关文章

  1. Android系列教程之五:Activity的生命周期
  2. 记录关于Gradle : Build Running的解决方法
  3. Android中使用XmlSerializer拼装XML数据
  4. android:sqlite 数据库的事务详解
  5. Android 开机震动的调用位置以及打开关闭方法
  6. Android移动应用基础学习——第四章数据存储
  7. Android中计算text文字大小的几个方法
  8. Android的DialogFragment的基本使用方法

随机推荐

  1. SearchView 自动展开和弹出输入法
  2. android 应用程序使用统计
  3. Android(安卓)Apkshare
  4. Android(安卓)Fresco监听回调,成功调回Bi
  5. Android(安卓)AlertDialog背景透明
  6. android仿照ipone的弹性效果
  7. android 自定义对话框宽不能占满父layout
  8. android new feature on 4.2
  9. android 颜色(color)
  10. Install ADB And Fastboot Android(安卓)