在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:

将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。


当前回答

将以下代码放在Android清单中的活动中。

android:configChanges="orientation"

当你改变方向时,这不会重新开始你的活动。

其他回答

我发现这样做的方法是使用onRestoreInstanceState和onSaveInstanceState事件在Bundle中保存一些东西(即使您不需要保存任何变量,也只需在其中放置一些东西,这样Bundle就不会为空)。然后,在onCreate方法上,检查Bundle是否为空,如果为空,则进行初始化,如果不是,则执行初始化。

我所做的。。。

在清单的活动部分中,添加了:

android:configChanges="keyboardHidden|orientation"

在活动代码中,实现:

//used in onCreate() and onConfigurationChanged() to set up the UI elements
public void InitializeUI()
{
    //get views from ID's
    this.textViewHeaderMainMessage = (TextView) this.findViewById(R.id.TextViewHeaderMainMessage);

    //etc... hook up click listeners, whatever you need from the Views
}

//Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    InitializeUI();
}

//this is called when the screen rotates.
// (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges)
@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);

    InitializeUI();
}

在清单中添加此行:android:configChanges=“orientation | screenSize”

将以下代码放在Android清单中的活动中。

android:configChanges="orientation"

当你改变方向时,这不会重新开始你的活动。

该方法是有用的,但在使用碎片时是不完整的。

片段通常在配置更改时重新创建。如果您不希望发生这种情况,请使用

setRetainInstance(true);在Fragment的构造函数中

这将导致在配置更改期间保留碎片。

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(布尔值)