在活动重新开始时在Android中恢复实例变量

时间:2015-05-05 05:11:24

标签: android android-activity tabs fragment recreate

我有一个Android项目,我正在创建一个自定义标签视图。我已经构建了主ActivityFragmentActivity),使其在屏幕底部有一个标签栏,其上方有FrameLayout。选项卡上的每个选项都会创建一个新的Fragment(与该选项相关)。现在,为了防止每次单击选项时重新创建片段,我将片段存储在活动中的实例变量中。因此,当单击选项卡选项时,我检查其片段是否已创建,如果尚未创建,我创建并将其添加到FrameLayout(并隐藏任何现有片段),否则,我只是隐藏现有片段(存储在名为currentlyViewedFragment的实例变量中)并显示已创建的与所单击选项匹配的片段。

同样,当调用活动的onCreate()时,我将初始选项卡设置为主选项卡(其中一个选项卡)。 这很有效,除非重新创建活动(由于方向更改)。在这里,我认为实例变量(实际上是指向已创建的片段的指针)会松散它们的值并设置为null。这会导致创建主页选项卡并将其覆盖在还原的视图上。我也知道你可以使用传递给onSaveInstanceState的包来保存状态,并使用onRestoreInstanceState恢复它。但是bundle需要包含可序列化的数据。但是,这些实例变量仅仅是指针!我该如何恢复他们的价值观?

注意:此问题已在我发布的评论中解决。

感谢。

1 个答案:

答案 0 :(得分:-1)

您的问题的答案是使用捆绑包进行状态恢复。创建一个可以放置变量的类,并且可以序列化,这样就可以将其对象放到bundle中。或者您也可以使用SharedPreferences存储实例变量'手机存储中的价值。我希望你能从我奇怪的答案中得到启发。