当我旋转屏幕时,片段被销毁并返回到 Activity,它打开了那个片段。但他为什么要这样做?
When I rotate the screen, the fragment is destroyed and returned to Activity, which opened that Fragment. But why he's doing so?
我有一个 Activity 可以通过 2 个不同的按钮打开 2 个不同的片段。默认情况下 Activity 创建时,它打开一个片段,我们称之为“主片段”。
我们通过第一个按钮转到的第一个片段我们遇到了零旋转问题,但是旋转后的第二个按钮消失了并且屏幕显示了主片段的内容。当我尝试向后旋转屏幕时,我再次看到了主要片段的内容。但为什么会这样,如果我不写任何代码,那必须 return 我到 Main Fragment 而无需单击按钮。
你有什么假设?
那是因为每次旋转屏幕时都会调用onCreate
。可能您正在通过 onCreate
方法显示 The Main Fragment
。如果将片段显示逻辑放在 onResume
中,您将面临同样的问题,因为在 onCreate 之后,onResume 被调用。
解决方案:将片段存储在共享首选项的顶部,这样您就知道每次调用 onCreate 时要显示的内容。
为什么会这样?
Default Behavior, Actiivty is getting recreated on orientation change so your fragment are.
说明
您需要了解 Activity Life Cycle 才能理解为什么会发生这种情况。
首先,“旋转屏幕”并不是我们今天所说的实际场景。因为任何配置更改都会导致 Android 重新启动您的 Activity。配置更改可能是设备旋转(因为现在我们有不同的屏幕布局可以利用),或者它可能是语言切换(因为我们需要 re-write 所有这些字符串,现在可能需要更多空间或它可能是可怕的 RTL 开关!),甚至是键盘可用性。
通过重新加载您的应用程序,系统实际执行的操作是调用 onDestroy(),然后立即调用 onCreate()。这样,您的 Activity 就会尽可能新鲜,并具有所有正确的创建数据(即使用户一直与您在一起)。
现在您有以下选项 -
从 AndroidManifest.xml
中为您的应用修复方向
但很明显,这对用户来说不是很好的体验。
- 用
onSaveInstanceState()
保存 activity 状态
这个方法会在onDestroy()之前被调用。而且,当你的 Activity 创建时,有一个匹配的步骤 onRestoreInstanceState() ,它也会被自动调用。所有这些自动步骤意味着您可以让系统担心保存和加载您的数据,因为您提前计划并制定了重要事项。 (或者,您可以跳过 onRestoreInstanceState() 并从 onCreate() 附带的 Bundle 中加载您保存的状态。
在 activity 中集成 Fragment,因为 activity 正在使用 destroy(),因此您的片段也将 destroy() 并重新创建。
请好好阅读Handling Configuration Change and this。
一旦你理解了这些概念,事情就会开始落入你的脑海,但只有当你完成你的学习曲线时,它才会发生。
编码愉快!
我有一个 Activity 可以通过 2 个不同的按钮打开 2 个不同的片段。默认情况下 Activity 创建时,它打开一个片段,我们称之为“主片段”。 我们通过第一个按钮转到的第一个片段我们遇到了零旋转问题,但是旋转后的第二个按钮消失了并且屏幕显示了主片段的内容。当我尝试向后旋转屏幕时,我再次看到了主要片段的内容。但为什么会这样,如果我不写任何代码,那必须 return 我到 Main Fragment 而无需单击按钮。
你有什么假设?
那是因为每次旋转屏幕时都会调用onCreate
。可能您正在通过 onCreate
方法显示 The Main Fragment
。如果将片段显示逻辑放在 onResume
中,您将面临同样的问题,因为在 onCreate 之后,onResume 被调用。
解决方案:将片段存储在共享首选项的顶部,这样您就知道每次调用 onCreate 时要显示的内容。
为什么会这样?
Default Behavior, Actiivty is getting recreated on orientation change so your fragment are.
说明
您需要了解 Activity Life Cycle 才能理解为什么会发生这种情况。
首先,“旋转屏幕”并不是我们今天所说的实际场景。因为任何配置更改都会导致 Android 重新启动您的 Activity。配置更改可能是设备旋转(因为现在我们有不同的屏幕布局可以利用),或者它可能是语言切换(因为我们需要 re-write 所有这些字符串,现在可能需要更多空间或它可能是可怕的 RTL 开关!),甚至是键盘可用性。
通过重新加载您的应用程序,系统实际执行的操作是调用 onDestroy(),然后立即调用 onCreate()。这样,您的 Activity 就会尽可能新鲜,并具有所有正确的创建数据(即使用户一直与您在一起)。
现在您有以下选项 -
从
中为您的应用修复方向AndroidManifest.xml
但很明显,这对用户来说不是很好的体验。
- 用
onSaveInstanceState()
保存 activity 状态
这个方法会在onDestroy()之前被调用。而且,当你的 Activity 创建时,有一个匹配的步骤 onRestoreInstanceState() ,它也会被自动调用。所有这些自动步骤意味着您可以让系统担心保存和加载您的数据,因为您提前计划并制定了重要事项。 (或者,您可以跳过 onRestoreInstanceState() 并从 onCreate() 附带的 Bundle 中加载您保存的状态。
在 activity 中集成 Fragment,因为 activity 正在使用 destroy(),因此您的片段也将 destroy() 并重新创建。
请好好阅读Handling Configuration Change and this。
一旦你理解了这些概念,事情就会开始落入你的脑海,但只有当你完成你的学习曲线时,它才会发生。
编码愉快!