处理FragmentA" 内的" AdapterA的最佳解决方案是什么?它想要使用来自另一个" AdapterB的数据在FragmentB" 中的RecyclerViewB?
我被困住了,我试着:
1-在适配器中使数据静态(无垃圾收集器)
2-我需要的重复数据(浪费内存)
(它有效但可能有更好的解决方案)
提前谢谢你。 (如果需要,请询问详细信息)
答案 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类之外,基本上没有其他方法。