我会失去什么吗?
只有当你在使用Fragment时才会失去一些东西。请参见Calling super.onCreate() with null parameter?。
是的,onCreate(...)
是启动Activity所必需的,但当你在使用Fragment时,传递Bundle
作为参数是必须的。
![Read this](https://istack.dev59.com/zHI7f.webp)
你从中推断出了什么?
无论如何,参数savedInstanceState
默认情况下总是null
。因此,在交易中你实际上不会失去任何东西。
但是等等,我们通常使用Bundles
来维护方向的改变,对吧?
以下清单代码声明了一个处理屏幕方向改变和键盘可用性改变的活动:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
现在,当这些配置之一发生变化时,MyActivity不会重新启动。相反,MyActivity会接收到一个调用
onConfigurationChanged()
的方法。该方法传递了一个 Configuration 对象,指定了新的设备配置。通过读取
Configuration
中的字段,您可以确定新的配置,并通过更新界面中使用的资源来进行适当的更改。在调用此方法时,您的活动的 Resources 对象会更新为基于新配置返回资源,因此您可以轻松地重置 UI 元素,而无需系统重新启动您的活动。
以下的onConfigurationChanged()
实现检查当前设备方向:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
但是
请记住:
当您声明您的活动来处理配置更改时,您需要负责重置任何为其提供替代方案的元素。如果您声明您的活动来处理方向更改并且有应在横向和纵向之间更改的图像,则必须在onConfigurationChanged()期间为每个元素重新分配每个资源。
super.onCreate(null)
,您应该失去所有先前的状态。您确定在AndroidManifest.xml
中没有指定configChanges
标志吗? - azizbekiannull
是一个可接受的值)。我想这是一个权衡的情况,除非你已经误识了你的 问题 的根本原因。 - Vikram