小编典典

旋转Android上的活动重启

all

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

  1. 将所有初始设置放在另一个函数中,这样它就不会在设备旋转或
  2. 使它onCreate不再被调用,布局只是调整或
  3. 将应用程序限制为仅纵向,这样onCreate就不会被调用。

阅读 109

收藏
2022-02-25

共1个答案

小编典典

使用应用程序类

根据您在初始化中所做的事情,您可以考虑创建一个新类,该类扩展Application并将您的初始化代码移动到onCreate该类中的重写方法中。

public class MyApplicationClass extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    // TODO Put your application initialization code here.
  }
}

应用程序类中的onCreate仅在创建整个应用程序时调用,因此 Activity 在方向或键盘可见性更改时重新启动不会触发它。

将此类的实例公开为单例并公开使用 getter 和 setter 初始化的应用程序变量是一种很好的做法。

注意:您需要在清单中指定新应用程序类的名称才能注册和使用它:

<application
    android:name="com.you.yourapp.MyApplicationClass"

对配置更改做出反应 [更新:自 API 13 起已弃用;
请参阅推荐的替代方案
]

作为另一种选择,您可以让您的应用程序侦听可能导致重新启动的事件 - 例如方向和键盘可见性更改 - 并在您的 Activity 中处理它们。

首先将android:configChanges节点添加到 Activity 的清单节点

 <activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

或适用于Android 3.2(API 级别 13)及更高版本:

<activity android:name=".MyActivity"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:label="@string/app_name">

然后在 Activity 中覆盖该onConfigurationChanged方法并调用setContentView以强制在新方向上重新完成 GUI
布局。

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.myLayout);
}
2022-02-25