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

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

推荐答案

Using the Application Class

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

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

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

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

NOTE: You'll need to specify the name of your new Application class in the manifest for it to be registered and used:

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

Reacting to Configuration Changes [UPDATE: this is deprecated since API 13; 100]

作为另一种 Select ,您可以让应用程序监听可能导致重新启动的事件(如方向和键盘可见性更改),并在活动中处理它们.

首先,将android:configChanges node 添加到活动的 list node

 <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">

然后在活动中覆盖onConfigurationChanged方法并调用setContentView,以强制GUI布局在新方向上重新完成.

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

Android相关问答推荐

在Android中点击滑动时触发的手势

打开平板电脑的下载文件夹中的文件,例如使用其mimeType将Intent发送到我们的应用程序

我遇到了一个HashMaps对象没有存储在Firebase数据库中的问题.HashMap的一个对象put方法未被存储

长流与长流的比较<>

了解数据加载在Kotlin中的工作原理

关于BLE扫描工作原理的说明

可组合:don';t剪辑视图

使用 Gadle kotlin 为多模块 Android 代码库设置 jacoco

修复报错 RecyclerView: No adapter attached;跳过布局

围绕动态大小的内容包装 Jetpack Compose Row?

Jetpack compose (Glance) 小部件在加载位图图像后不会重新组合

Android CompanionDeviceManager 永远找不到任何附近的蓝牙设备

如何解决 compose 中material 图标的由于接收器类型不匹配,以下候选者都不适用

如何在组件之间导航

无法 HEAD 'https://jcenter.bintray.com/com/facebook/react/react-native/maven-metadata.xml'

Android Studio 错误要求依赖它的库和应用程序针对 Android API 的 33 版或更高版本进行编译.

firebase-messaging和firebase-inappmessaging-display之间有什么区别?

在 jetpack compose 中使用 viewmodel 的最佳实践

在 Jetpack Compose 中 Select 要省略的文本

Android全屏AlertDialog