Android:将包含3个片段的活动数据传递给之前的活动

时间:2015-06-04 09:33:41

标签: android android-intent android-fragments android-activity onbackpressed

我正在使用Android Studio构建Android应用。 假设我有Activity1和Activity2。 Activity2有3个片段(3个标签)。 我设法通过使用片段适配器将数据从Activity1传递到Activity2,然后从Activity2传递到它的片段。

1) 我想做相反的事情:从所有3个片段中收集数据并将其传递给它们所在的活动(Activity2),然后将数据从Activity2传递回Activity1。

我已经实现了一个将数据从一个片段传递到Activity2的接口,但是我如何(以及何时)将所有3个片段中的数据传递给Activity2? 我写的方法将一个对象从片段发送到Activity2。但是Activity2中的方法只获得一个对象...... 或者也许有一种方法可以将数据从片段发送到Activity2 Fragment Adapter? (这可能是我认为最好的......)

2) 将数据从Activity2传递回Activity1的最佳方法是覆盖“onBackPressed”并使用startActivityForResult和setResult吗? (除了ActionBar“后退按钮”之外,我没有按钮来执行此操作。)

谢谢!

3 个答案:

答案 0 :(得分:1)

1)您可以使用以下3种方法创建一个界面:setResult1()setResult2()setResult3(),并使您的Activity实现此界面,以便它可以收集3个片段的结果为他们有空的时候。一旦结果发生变化,片段就应该在这个界面中调用它们自己的方法,并且在恢复之后(如果重新创建了Activity,就像你改变方向一样)。

2) Activity2 将结果发送回 Activity1 ,最好的方法是从 Activity1 启动 Activity2 strong> startActivityForResult()。然后,每次 Activity2 收集新结果时,都应调用setResult(int resultCode, Intent Data)。您可以多次调用它来替换以前的结果。如果您立即设置结果,则无需覆盖onBackPressed()

答案 1 :(得分:1)

我的建议是创建一个用于存储和传递数据的新类,这个类可以被任何活动或片段访问。这个类必须是单例,所以相同的数据由不同的活动和片段共享。

qr.UserId = User.Identity.GetUserId();

您可以使用它来保存或从任何活动或片段中获取数据: DataCache.getInstance(上下文).getData()/ SAVEDATA(数据)

在这种情况下,数据存储在内存中,您可以重写集合并获取函数以将数据保存到您想要的任何位置,例如SDCARD或数据库。

答案 2 :(得分:0)

您可以将来自所有3个片段的数据存储到共享首选项中,并在活动1中获取该数据。您应该在检索后清除共享首选项中的数据。