在android中分享片段之间的数据

时间:2017-04-14 16:29:33

标签: java android android-fragments android-adapter

处理FragmentA" 内的" AdapterA的最佳解决方案是什么?它想要使用来自另一个" AdapterB的数据在FragmentB" 中的RecyclerViewB?

enter image description here

我被困住了,我试着:
1-在适配器中使数据静态(无垃圾收集器)
2-我需要的重复数据(浪费内存)
     (它有效但可能有更好的解决方案)

提前谢谢你。 (如果需要,请询问详细信息

1 个答案:

答案 0 :(得分:1)

如果您在MainActivity中创建一个类的新实例,其中包含您希望两个片段都可以访问的任何内容。如果您实现Serializable或Parcelable,您也可以使用Bundle / Intent将其发送到每个片段。

然后,由于您在两个不同的片段中具有相同的实例,如果您编辑片段X中的数据,片段Y将能够访问它。

见:

   |---MainActivity---|
   |         |        |
   V         V        V
 Frag A <->Data <->Frag B

MainActivity创建一个新类(数据),并将其发送给每个片段。片段可以更新类中的数据。请注意,如果不支持任何给定的数据类型,则必须使用class。

如果您不想使用Serializable或parcelable,请尽可能将MainActivity作为实例发送到每个片段。然后,从每个片段中获取MainActivity实例并找到所需的数据。

如果无法将MainActivity传递给任何一个片段,并且无法使用Serializable / Parcelable,并且bundle.putExtra或intent.putExtra不支持该数据类型,则必须使用静态导入。

这是你唯一的选择。

或者,您可以创建一个扩展“Application”的类。然后你写:

MyApplicationClass mac = (MyApplicationClass) getApplicationContext();

然后,您访问应用程序扩展类中的数据(此处:mac实例)

最后的话

如果您不想使用静态实例,发送带有内容的parcelable / serializable类,或者使用扩展Application的类,则无法传输数据(考虑到您使用的是HashMap,您声称不能由Intent或Bundle发送)。如果您有可以使用Intent或Bundle发送的数据类型或类,则不必使用静态实例或parcelable / serializable类。但是凭借你所处的位置,我已经提出了你所拥有的所有选择。除了使用包含hashmap的类,使用静态实例或使用Application类之外,基本上没有其他方法。