如何在活动和片段之间正确交互

时间:2017-07-12 15:46:33

标签: android android-fragments android-activity

我正在使用Steppers。所以目前我有一个活动有3个片段,用户必须在其中填写一些信息,比如表格。 有很多信息,所以我制作了4个类来分隔这些信息。 此外,一些信息是自动获取的,所以在片段中我要求权限... 例如:

public class UserIds {
@Nullable
@Expose  String phone;
@Expose String Email;
@Expose String phone2;
@Expose String ModCel;
@Expose String Doc;


//Setters, getters and another simple method

public class UserLocation {
@Nullable
@Expose  String street;
@Expose int number;
....

//Setters, getters and another simple method

...

等等2个课程。

所以,你可以看到我正在进行改造。

我怎样才能正确处理这样的事情? 我读到了Parceler,Interfaces,EventBus ...... 我应该在Activity中声明所有对象实例,然后在每个片段中修改(某些对象由不同的片段修改)或者可能在每个片段中创建实例,存储信息,并在按下完成按钮时获取信息?在OnDestroy()调用的情况下,如何保存这些对象?

另外需要考虑的是,最后,当表单结束时。其他活动可能包含所有信息并要求更多(是的,需要很多信息)。

最后,每次用户填写表单(使用完整按钮,然后当其他活动要求更多时,此数据将被发送到服务器)

1 个答案:

答案 0 :(得分:0)

我选择了Parceler方式并且完美地工作。也许帮助某人,我把@Parcel放在每个POJO类中,然后当我处理片段与StepperAdapter(因为stepstone库)片段中我想保存数据时我做了这个:

    // Obtaing all the fragments 
    List<Fragment> steps = getFragmentManager().getFragments();
    // save states
    Bundle bundle = new Bundle();
    Parcelable wrapped = Parcels.wrap(obj1);
    Parcelable wrapped2 = Parcels.wrap(obj2);
    bundle.putParcelable("OBJ1", wrapped);
    bundle.putParcelable("OBJ2", wrapped2);
    steps.get(fragment2reference).getArguments().putAll(bundle);

然后在接收的片段中,你必须创建一个构造函数然后你就可以接收数据了(因为片段已经创建了,所以bundle throw错误)

//Constructor
public fragment2(){
    super();
    setArguments(new Bundle());
}

当fragment2显示:

   OBJ1 a = Parcels.unwrap(getArguments().getParcelable("OBJ1"));
   OBJ2 b = Parcels.unwrap(getArguments().getParcelable("OBJ2"));

希望有人帮忙!