在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:
将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。
在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:
将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。
当前回答
您还可以考虑使用Android平台的跨方向更改持久化数据的方式:onRetainNonConfigurationInstance()和getLastNonConfigurationInstance)。
这允许您在配置更改中保存数据,例如您可能从服务器获取的信息或在onCreate中或之后计算的其他信息,同时还允许Android使用xml文件重新布局“活动”,以适应当前使用的方向。
请看这里或这里。
应该注意的是,这些方法现在已经被弃用(尽管比上面大多数解决方案所建议的自己处理方向改变更灵活),建议每个人都切换到Fragments,而不是在每个想要保留的Fragment上使用setRetainInstance(true)。
其他回答
您所描述的是默认行为。您必须通过添加以下内容自行检测和处理这些事件:
android:configChanges
然后是您想要处理的更改。因此,对于方向,您可以使用:
android:configChanges="orientation"
对于正在打开或关闭的键盘,您可以使用:
android:configChanges="keyboardHidden"
如果要同时处理这两种情况,只需使用pipe命令将它们分开,如:
android:configChanges="keyboardHidden|orientation"
这将在您调用的任何Activity中触发onConfigurationChanged方法。如果重写该方法,则可以传入新值。
希望这有帮助。
您需要使用onSavedInstanceState方法来存储其参数的所有值。is是一个捆绑包
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outPersistentState.putBoolean("key",value);
}
和使用
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getBoolean("key");
}
检索并设置值以查看对象它将处理屏幕旋转
修复AndroidManifest.xml中的屏幕方向(横向或纵向)
android:screenOrientation=“纵向”或android:scheenOrientation=“横向”
为此,不会调用onResume()方法。
Android 3.2及更高版本更新:
警告:从Android 3.2(API级别13)开始,当设备在纵向和横向方向之间切换时,“屏幕大小”也会发生变化。因此,如果在为API级别13或更高级别开发时(如minSdkVersion和targetSdkVersion属性所声明的),想要防止因方向改变而导致运行时重新启动,则除了“方向”值之外,还必须包含“screenSize”值。也就是说,您必须声明android:configChanges=“orientation|screenSize”。但是,如果您的应用程序以API级别12或更低为目标,则您的活动始终自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行时,此配置更改也不会重新启动您的活动)。
从…起http://web.archive.org/web/20120805085007/http://developer.android.com/guide/topics/resources/runtime-更改.html
使用定向监听器在不同的定向上执行不同的任务。
@Override
public void onConfigurationChanged(Configuration myConfig)
{
super.onConfigurationChanged(myConfig);
int orient = getResources().getConfiguration().orientation;
switch(orient)
{
case Configuration.ORIENTATION_LANDSCAPE:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Configuration.ORIENTATION_PORTRAIT:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
default:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}