我有兴趣知道在Android设备旋转(即配置更改)时哪些方法被覆盖?已更改Android配置
onSaveInstanceState(...)
,onConfigurationChanged(...)
,onRestoreInstanceState(...)
- 类似的东西?
这将是也很有趣,我听关于与改变配置连接的全过程。谢谢。
我有兴趣知道在Android设备旋转(即配置更改)时哪些方法被覆盖?已更改Android配置
onSaveInstanceState(...)
,onConfigurationChanged(...)
,onRestoreInstanceState(...)
- 类似的东西?
这将是也很有趣,我听关于与改变配置连接的全过程。谢谢。
当你旋转你的活动将重新创建设备和所有的变量将重新初始化。因此,在这种情况下,如果您希望某些值在Rotation上保持不变,则可以使用onSaveInstanceState()
存储它们的状态,并且可以通过检查Bundle不为空来再次恢复onCreate()
。
if(savedInstanceState != null){
// get the restore value from the Bundle
}
凡为会当你旋转设备(注意,这才会被调用,如果你选择的配置,你想与configChanges
属性来处理你的清单)被调用。从参数中您将获得新的设备配置。
如果您不想让您的活动在Device旋转时重新创建,那么您必须将此行添加到AndroidManifest
文件中的活动标记中。
android:ConfigChanges="keyboardHidden|orientation"
从Android开发者...
要在运行时的结构变更时保留的对象:
onRetainNonConfigurationInstance()
方法返回你想保留的对象。getLastNonConfigurationInstance()
恢复您的对象。的Android电话的onStop()和的onDestroy()时,它关闭您的活动之间onRetainNonConfigurationInstance()由于配置更改。在实现onRetainNonConfigurationInstance()时,您可以返回所需的任何对象,以便在配置更改后有效恢复您的状态。
中这可能是有价值的情景是,如果你的应用程序加载大量来自网络的数据。如果用户更改设备的方向并重新启动活动,则应用程序必须重新获取数据,这可能会很慢。您可以改为执行onRetainNonConfigurationInstance()
以返回携带您的数据的对象,然后在您的活动再次以getLastNonConfigurationInstance()
重新开始时检索数据。
看看这里获取更多信息Retaining an Object During a Configuration Change你还可以找到例如在他们的..
谢谢..
谢谢。有用的信息;) – lomza
据Android开发人员的参考,你必须使用:
@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();
}
}
欲了解更多信息,请参阅:http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
你可能有兴趣看到:http://developer.android.com/guide/topics/manifest/activity-element.html#config
在这里,您可以找到你可以听的所有配置监听器。
记得把它们放在Android清单:
<activity
android:configChanges=["orientation"]
. . .
</activity>
希望这有助于...
转到清单,并添加: 机器人:configChanges = “方向|屏幕尺寸”
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"
android:configChanges="orientation|screenSize"
/>
In Main Ac tivity:复制并粘贴此代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
全部完成 -
我有这个问题。我有两种布局:一种用于景观,另一种用于肖像。我有一个文本视图。我不想失去旋转时输入的文字。到目前为止,我使用onConfigurationChanged,基本上与onCreate中的工作人员相同。问题是,在onConfigurationChanged我没有一个捆绑软件,我无法保存/检索输入的文本。当我使用onSaveInstanceState()和onConfigurationChanged()时,第一个不起作用。我不知道如何解决这个问题.... – lomza
您检索onCreate()中的Bundle值并进一步使用它。 –
我明白我的错误,我不必使用configChanges。我只需要重写onSaveInstanceState和onRestoreInstanceState。在那里我可以保存/检索我的文本视图,布局配置处理是自动完成的,所以我不需要做其他任何事情。 onConfigurationChanged覆盖了一切,我不需要如此复杂的逻辑。 – lomza