赞
踩
参考 https://blog.csdn.net/zhoup324/article/details/53182065
在 配 置 Activity 的 地 方 进 行 如 下 的 配 置
上述修改也可以在Java代码中通过类似如下代码来设置
缺省状态下,Activity每次横竖屏切换(包括用setRequestedOrientation调用)都会重新调用一轮onPause-> onStop-> onDestory-> onCreate->onStart->onResume操作,从而销毁原来的Activity对象,创建新的Activity对象,这是因为通常情况下软件在横竖屏之间切换,界面的高宽会发生转换,从而可能会要求不同的布局。
上面这两种方式实现对于横竖屏的切换加载不同的布局文件,都会让activity重新加载一次,那么必然就会导致数据的丢失或者是数据的重新获取,造成了过多的额外的功耗,那么我们可以在翻转之前保存一下现在已经获取到的数据,那么在翻转之后就可以直接使用,而不需要重新获取或者重新加载,具体在下面看
- 重写Activity.onRetainNonConfigurationInstance(),用户横竖屏切换前保存数据
-
- @Override
-
- public Object onRetainNonConfigurationInstance() {
-
- final MyDataObject data = collectMyLoadedData();
-
- return data;
-
- }
-
- 在onCreate()函数中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据
-
- @Override
-
- public void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.main);
-
-
-
- final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
-
- if (data == null) {
-
- data = loadMyData();
-
- }
-
- ...
-
- }
虽然重启Activity为我们提供了保存数据和读取数据的方式,但是如此一来程序会显得有些繁琐,所以有时候程序员往往就不想让Activity重启,Android也为我们提供了解决方案,就是通过onConfigurationChanged拦截横竖屏变换,从而进行必要的重新布局和切换操作。
操作步骤如下:
- Andorid 3.2以前的SDK可以使用如下配置
-
- android:configChanges="orientation|keyboardHidden"
-
- 而Adnroid 3.2以后的SDK必须添加一个screenSize属性,具体如下
-
- android:configChanges="keyboardHidden|orientation|screenSize"
-
- 或者
-
- android:configChanges="orientation|screenSize"
- @Override
- public void onConfigurationChanged(Configuration newConfig){
- super.onConfigurationChanged(newConfig);
- if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_
- LANDSCAPE){
- //TODO
- }else
- if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_
- PORTRAIT){
- //TODO
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。