在讨价还价中失去了什么?
仅当您使用 Fragments 时。请参阅使用 null 参数调用 super.onCreate()?
是的,启动 Activity 是必需的,但在使用片段时需要作为参数onCreate(...)
传递。Bundle
你从中推断出什么?
savedInstanceState
无论如何,该参数是null
默认的。所以你在交易中并没有真正失去任何东西。
但是等等,我们通常Bundles
用来保持方向变化,对吧?
以下清单代码声明了一个处理屏幕方向更改和键盘可用性更改的活动:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
现在,当这些配置之一发生更改时,MyActivity 不会重新启动。相反,MyActivity 收到对onConfigurationChanged()
. 此方法传递一个配置对象,该对象指定新的设备配置。通过读取 中的字段Configuration
,您可以确定新配置并通过更新界面中使用的资源进行适当的更改。在调用此方法时,Activity 的 Resources 对象会更新以根据新配置返回资源,因此您可以轻松地重置 UI 的元素,而无需系统重新启动您的 Activity。
以下onConfigurationChanged()
实现检查当前设备方向:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
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() 期间将每个资源重新分配给每个元素。