在片段之间传递数据并在屏幕方向更改上保存状态

时间:2014-04-06 22:46:27

标签: android fragment communication state screen-orientation

在开始之前,我已在线阅读thisthis和更多文章。我仍然无法找到正确的方法。

所以我的应用中只有一个活动 6个片段。第一个是ListFragment,它从SQLite表中加载一个列表。当用户点击此列表中的一行时,我会做两件事:

1)通过侦听器从该行获取 int ,并将其传递回父活动,该活动使用简单的setter方法将其存储为类变量。
2)将此ListFragment替换为另一个简单的Fragment。这个新的Fragment在该类变量上使用一个简单的 getter()来从不同的表中检索一些信息,并向用户显示所有细节。

到目前为止一切顺利。现在,如果我在这个细节片段上,并且我更改了屏幕方向,则不会重新加载活动状态(因为我正在检查savedInstanceStateonCreate()是否 null ,但是,类变量失去了它们的价值,我的应用程序崩溃了。

基本上我试图将数据从ListFragment传递给细节片段。我是通过活动来完成的,这导致了一个问题。根据Android文档:

  

所有片段到片段的通信都是通过关联的方式完成的   活动。两个碎片永远不应该直接沟通。

没有特定的代码给我带来麻烦,所以没有发布任何代码。

1 个答案:

答案 0 :(得分:0)

onSaveInstanceStateonRestoreInstanceState仅用于保存和恢复活动的每个实例状态,以防您的活动被OS销毁(例如,释放内存或重新创建)当设备方向改变时)。因此,您可以将变量保存在onSaveInstanceState中,然后使用onRestoreInstanceState将其恢复。

对于您的下一个问题,我认为article会对您有所帮助。 Gene的回答question也会帮助你。