在我的 Android 应用程序中,当我旋转设备(滑出键盘)时,我的 Activity
会重新启动(调用 onCreate
)。现在,这可能是它应该的样子,但我在 onCreate
方法中做了很多初始设置,所以我需要:
- 将所有初始设置放在另一个函数中,这样它就不会在设备旋转时全部丢失,或者
- 让它不再调用
onCreate
并且布局只是调整或 - 将应用限制为仅纵向,这样就不会调用
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/