在 activity 重新创建时恢复 Android 中的实例变量
Restoring instance variables in Android upon activity recreation
我有一个 Android 项目,我正在为其创建自定义选项卡视图。我将主 Activity
(FragmentActivity
) 构造为在屏幕底部有一个标签栏,在其上方有一个 FrameLayout
。选项卡上的每个选项都会创建一个新的 Fragment
(与该选项相关)。现在,为了防止每次单击选项时都重新创建片段,我将片段存储在 activity 中的一个实例变量中。因此,当单击选项卡选项时,我检查其片段是否已创建,如果尚未创建,我创建并将其添加到 FrameLayout
(并隐藏任何现有片段),否则,我只是隐藏现有片段(存储在名为 currentlyViewedFragment
的实例变量中)并显示与单击选项匹配的已创建片段。
另外,当 activity 的 onCreate()
被调用时,我将初始选项卡设置为主页选项卡(选项卡之一)。
这很好用,除非重新创建 activity(由于方向更改)。在这里,我认为实例变量(本质上是指向已创建片段的指针)丢失了它们的值并设置为 null。这会导致主页选项卡被创建并覆盖在恢复的视图上。我还知道您可以使用传递给 onSaveInstanceState
的包保存状态并使用 onRestoreInstanceState
恢复它。但是 bundle 需要包含可序列化的数据。然而,这些实例变量只是指针!我如何恢复它们的值?
注意:此问题已在我发表的评论中解决。
谢谢。
您的问题的答案是使用捆绑包进行状态恢复。创建一个 class ,您可以在其中放置变量并且是可序列化的,因此您可以将其对象放入包中。或者您也可以使用 SharedPreferences 将实例变量的值存储在 phone 存储中。我希望你能从我奇怪的回答中得到启发。
我有一个 Android 项目,我正在为其创建自定义选项卡视图。我将主 Activity
(FragmentActivity
) 构造为在屏幕底部有一个标签栏,在其上方有一个 FrameLayout
。选项卡上的每个选项都会创建一个新的 Fragment
(与该选项相关)。现在,为了防止每次单击选项时都重新创建片段,我将片段存储在 activity 中的一个实例变量中。因此,当单击选项卡选项时,我检查其片段是否已创建,如果尚未创建,我创建并将其添加到 FrameLayout
(并隐藏任何现有片段),否则,我只是隐藏现有片段(存储在名为 currentlyViewedFragment
的实例变量中)并显示与单击选项匹配的已创建片段。
另外,当 activity 的 onCreate()
被调用时,我将初始选项卡设置为主页选项卡(选项卡之一)。
这很好用,除非重新创建 activity(由于方向更改)。在这里,我认为实例变量(本质上是指向已创建片段的指针)丢失了它们的值并设置为 null。这会导致主页选项卡被创建并覆盖在恢复的视图上。我还知道您可以使用传递给 onSaveInstanceState
的包保存状态并使用 onRestoreInstanceState
恢复它。但是 bundle 需要包含可序列化的数据。然而,这些实例变量只是指针!我如何恢复它们的值?
注意:此问题已在我发表的评论中解决。
谢谢。
您的问题的答案是使用捆绑包进行状态恢复。创建一个 class ,您可以在其中放置变量并且是可序列化的,因此您可以将其对象放入包中。或者您也可以使用 SharedPreferences 将实例变量的值存储在 phone 存储中。我希望你能从我奇怪的回答中得到启发。