android - Activity 在旋转 Android 时重新启动

标签 android rotation android-activity

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

  1. 将所有初始设置放在另一个函数中,这样它就不会在设备旋转时全部丢失,或者
  2. 让它不再调用 onCreate 并且布局只是调整或
  3. 将应用限制为仅纵向,这样就不会调用 onCreate

最佳答案

使用应用程序类

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

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

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

最好将此类的实例公开为单例并公开您正在使用 getter 和 setter 初始化的应用程序变量。

注意:您需要在 list 中指定新应用程序类的名称,以便注册和使用:

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

对配置更改使用react [更新:自 API 13 起已弃用; see the recommended alternative ]

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

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

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

Android 3.2 (API level 13) and newer :

<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);
}

关于android - Activity 在旋转 Android 时重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796761/

相关文章:

java - 如何通过单击 ListView 中的项目转到另一个 fragment ?

iphone - 使用 CALayer 的变换对 UIView 的边缘进行抗锯齿处理

android - Activity 在 Activity 堆栈中的位置

java - Android 为什么文本显示在onCreate

android - 如何检查本地 val 是否已初始化?

java - "cannot find symbol method setOnDismissListener(<anonymous OnDismissListener>)"

three.js - 三 js : Disable auto rotate of sprite

rotation - 两个四元数之间的 "Distance"(或角幅度)?

android - 使用 fragment 在选项卡中启动 Activity

安卓 Google Places API "PLACES_API_QUOTA_FAILED"