Android中Fragment与Activity通信的最佳实践

6
我是Android Fragment的新手,正在学习Fragment到Activity的通信。在Android中,Fragment到Activity通信的最佳做法是什么?
比如说,我有一个FragmentA和一个ActivityA。在我的屏幕上弹出FragmentA后,我想在ActivityA中执行一些方法(可能与UI相关)。
以下是两个可能的解决方案:
1. 在FragmentA中使用getActivity并将Activity转换为ActivityA,然后调用某些方法。 2. 在FragmentA中创建一个接口回调,然后在ActivityA中实现该回调。然后在回调上调用某些方法。
在Android开发中,哪种模式更常见/更受欢迎?为什么?或者,您是否有更好的方法来在Android中从片段到活动进行通信?
非常感谢您的任何评论、意见和建议。^^

1
第二个解决方案可能是最好的,我还有一个建议,确保你使用newInstance方法创建你的片段,并使用setArguments将参数传递给该片段,以便稍后可以使用它们。当我开始时,我希望我知道这一点,哈哈。 - ksudu94
如果您使用回调接口,如何通过setArguments保存回调实例? 这对我来说似乎是个问题 有人有想法吗? - ediBersh
5个回答

5
第二种解决方案是首选,因为它使您的片段更独立于其主机活动。
如果将来您决定将片段放在另一个活动中,则不需要对片段进行任何更改,只需在活动上实现接口即可。
我会添加第三种解决方案,即使用事件总线(例如Otto),这也可以工作,尽管有些人可能认为它使您的代码稍微难以阅读。

2

第一种方法是一个不好的做法。第二种方法可以正常工作,但是你的片段将会和你的活动 紧密耦合

还有一种更好的方法是使用一些 事件总线库,比如otto。使用这个库可以在你的活动和片段之间实现松散耦合的有效通信。


1

如果您的片段仅由一个活动使用,则最好使用第一种模式。 如果您希望片段与托管片段的活动之外的某些其他对象通信,则需要采用第二种方法。如果您始终希望与托管活动通信,则不需要回调函数。只需创建一个接口并在需要的所有活动上实现它。然后在片段中转换由getActivity()返回的活动。

MyInterface myInteface = (MyInterface) getActivity();
myinterface.somemethod();

你甚至可以检查活动是否实现了所需的接口等。

1

你的第二种方法更加灵活。在一个活动和一个片段的情况下,你可能看不到巨大的好处。如果你必须在另一个活动中使用相同的片段,那么通过这种方式转换你的活动很可能会出现问题。尽管如此,第一种方法并没有错,只是有点受限制。


1
接口方法效果良好,更加灵活,因为它不会直接将您的片段与活动绑定在一起。您还应考虑活动可能需要做多少工作,也就是说,它可能最终要管理多个片段。这往往会导致“肥胖片段”,就像我在这里提出的问题当我开始使用它们时一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接