java - android中fragment之间共享数据

标签 java android android-fragments android-adapter

处理 “FragmentA 内的 RecyclerViewA 的 AdapterA” 想要使用 FragmentB 内的另一个 “RecyclerViewB 的 AdapterB”的数据的最佳解决方案是什么“

enter image description here

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

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

最佳答案

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

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

看这个:

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

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

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

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

这些是你唯一的选择。

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

MyApplicationClass mac = (MyApplicationClass) getApplicationContext();

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

最后一句话

如果您不想使用静态实例,发送包含内容的可包裹/可序列化类,或使用扩展应用程序的类,则无法传输数据(考虑到您正在使用您声称不能的 HashMap)通过 Intent 或 Bundle 发送)。如果您有可以使用 Intent 或 Bundle 发送的数据类型或类,则不必使用静态实例或可包裹/可序列化类。但鉴于你所处的位置,我已经向你展示了所有的选择。除了使用包含 HashMap 的类、使用静态实例或利用 Application 类之外,基本上没有其他方法。

关于java - android中fragment之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43415520/

相关文章:

java - 数组大小和 .length 的问题

java - 使用解析图像从 Gridview 到 ViewPager

java - 泛型和 Class.asSubclass

java - 当它说你可以使用 eclipse 时,我该如何使用 eclipse 来构建这个应用程序? sinch.com/tutorials/android-video-calling

android - 如何更快地在设备上进行测试?

java - findfragmentbyid 在 vi​​ewpager 下托管 3 个 fragment 的 mainActivity 中返回 null

java - 为什么注释属性的值应该是常量表达式?

java - Android Java 访问 ROOM 数据库的对象

android - 如何使 DialogFragment 模态化?

fragment 动画的 Android 最佳实践