我是Android Fragment的新手,并尝试学习片段到活动的通信。 Android中用于片段到活动通信的更好方法(最佳实践)是什么?
假设我有FragmentA和ActivityA。 在我的屏幕弹出FragmentA之后,我想在ActivityA中执行一些方法(可能与UI相关)
这里有两种(模式)可能 的解决方案:
Android开发中哪种模式更常见/更常见,以及为什么。或者你有更好的方法在Android中从片段到活动进行交流以与我分享?
任何评论,意见和建议都受到高度赞赏和欢迎。 ^^。
答案 0 :(得分:5)
第二种解决方案是首选解决方案,因为它允许您的片段更加独立于其托管活动。
如果将来您决定将片段放在不同的活动上,则片段不需要进行任何更改,您只需要在活动中实现该接口。
我将添加第三个使用事件总线(例如Otto)的解决方案,这也有效,尽管有些人可能认为它会使您的代码的可读性降低。
答案 1 :(得分:2)
第一种方法将是一种不好的做法。第二种方法可以正常工作,但您的片段将与您的活动紧密耦合。
还有一种更好的方法是使用一些事件总线库,例如otto 使用此功能,您可以有效地与活动中的松散耦合进行通信。片段。
答案 2 :(得分:1)
您的第二种方法更灵活。您可能看不到一个活动和一个碎片情况的巨大好处。如果你必须在另一个活动中使用相同的片段,它很可能会通过像你那样的活动来破坏。也就是说,第一种方法没有任何问题,但它只是有点受限制。
答案 3 :(得分:1)
当您的片段仅由一个活动使用时,第一个模式最佳。 如果您希望片段与其他对象(而不是托管片段的活动)进行通信,则需要第二种方法。如果您总是希望与托管活动进行通信,则不需要回调。只需创建一个界面,并根据需要在尽可能多的活动上实现它。然后在getActivity()返回的片段转换活动中。
MyInterface myInteface = (MyInterface) getActivity();
myinterface.somemethod();
您甚至可以检查活动是否实现了所需的界面等。
答案 4 :(得分:1)
接口方法工作正常,并且只要它不直接将片段绑定到活动,就会更灵活。您还应该考虑的一件事是活动可能需要做多少工作,也就是说它最终可能会管理多个碎片。这有导致脂肪碎片的倾向。正如我在这里提出的问题when I started using them