在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:
将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。
在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:
将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。
当前回答
您可以在活动中使用ViewModel对象。
ViewModel对象在配置更改期间自动保留,以便它们所保存的数据可立即用于下一个活动或片段实例。阅读更多信息:https://developer.android.com/topic/libraries/architecture/viewmodel
其他回答
在清单中添加此行:android:configChanges=“orientation | screenSize”
您可以在活动中使用ViewModel对象。
ViewModel对象在配置更改期间自动保留,以便它们所保存的数据可立即用于下一个活动或片段实例。阅读更多信息:https://developer.android.com/topic/libraries/architecture/viewmodel
谷歌推出的android架构中最好的组件之一将满足ViewModel的所有要求。
它旨在以生命周期的方式存储和管理与UI相关的数据,并允许数据在屏幕旋转时继续存在
class MyViewModel : ViewModel() {
请参阅:https://developer.android.com/topic/libraries/architecture/viewmodel
我发现这样做的方法是使用onRestoreInstanceState和onSaveInstanceState事件在Bundle中保存一些东西(即使您不需要保存任何变量,也只需在其中放置一些东西,这样Bundle就不会为空)。然后,在onCreate方法上,检查Bundle是否为空,如果为空,则进行初始化,如果不是,则执行初始化。
人们都说你应该使用
android:configChanges="keyboardHidden|orientation"
但在Android中处理旋转的最佳和最专业的方法是使用Loader类。这不是一个著名的类(我不知道为什么),但它比AsyncTask要好得多。有关更多信息,您可以阅读Udacity的Android课程中的Android教程。
当然,作为另一种方式,您可以使用onSaveInstanceState存储值或视图,并使用onRestoreInstanceState读取它们。这真的取决于你。