0

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

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

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

2) 将数据从 Activity2 传递回 Activity1 的最佳方法是覆盖“onBackPressed”并使用 startActivityForResult 和 setResult?(除了ActionBar“后退按钮”之外,我没有按钮可以做到这一点)。

谢谢!

4

3 回答 3

1

1)您可以使用 3 个方法创建一个接口,例如:setResult1()setResult2()并使setResult3()您的 Activity 实现此接口,以便它可以在 3 个 Fragment 可用时立即收集它们的结果。一旦结果发生变化,片段应该在这个接口中调用它们自己的方法,并且在恢复之后(以防重新创建 Activity,比如当你改变方向时)。

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

于 2015-06-04T10:06:51.643 回答
1

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

public static DataCache instance;
private UserInfo user;    //here's the data you want to save

private DataCache(Context c){
    this.user=new UserInfo();
}

public static DataCache getInstance(Context c){
    if(null==instance){
        instance=new DataCache(c);
    }
    return instance;
}

public void setData(UserInfo data){
    this.user=user;
}

public UserInfo getData(){

    return user;
}

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

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

于 2015-06-04T10:10:02.700 回答
0

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

于 2015-06-04T09:52:18.620 回答