片段到活动通信的Android最佳做法

时间:2014-09-12 18:58:01

标签: android android-fragments fragment

我是Android Fragment的新手,并尝试学习片段到活动的通信。 Android中用于片段到活动通信的更好方法(最佳实践)是什么?

假设我有FragmentA和ActivityA。 在我的屏幕弹出FragmentA之后,我想在ActivityA中执行一些方法(可能与UI相关)

这里有两种(模式)可能 的解决方案:

  1. 在FragmentA getActivity中,将Activity转换为ActivityA,然后调用somemethod。
  2. 在FragmentA中创建一个接口回调,然后在ActivityA中实现该回调。然后在回调上,调用somemethod。
  3. Android开发中哪种模式更常见/更常见,以及为什么。或者你有更好的方法在Android中从片段到活动进行交流以与我分享?

    任何评论,意见和建议都受到高度赞赏和欢迎。 ^^。

5 个答案:

答案 0 :(得分:5)

第二种解决方案是首选解决方案,因为它允许您的片段更加独立于其托管活动。

如果将来您决定将片段放在不同的活动上,则片段不需要进行任何更改,您只需要在活动中实现该接口。

我将添加第三个使用事件总线(例如Otto)的解决方案,这也有效,尽管有些人可能认为它会使您的代码的可读性降低。

答案 1 :(得分:2)

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

还有一种更好的方法是使用一些事件总线库,例如otto 使用此功能,您可以有效地与活动中的松散耦合进行通信。片段。

答案 2 :(得分:1)

您的第二种方法更灵活。您可能看不到一个活动和一个碎片情况的巨大好处。如果你必须在另一个活动中使用相同的片段,它很可能会通过像你那样的活动来破坏。也就是说,第一种方法没有任何问题,但它只是有点受限制。

答案 3 :(得分:1)

当您的片段仅由一个活动使用时,第一个模式最佳。 如果您希望片段与其他对象(而不是托管片段的活动)进行通信,则需要第二种方法。如果您总是希望与托管活动进行通信,则不需要回调。只需创建一个界面,并根据需要在尽可能多的活动上实现它。然后在getActivity()返回的片段转换活动中。

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

您甚至可以检查活动是否实现了所需的界面等。

答案 4 :(得分:1)

接口方法工作正常,并且只要它不直接将片段绑定到活动,就会更灵活。您还应该考虑的一件事是活动可能需要做多少工作,也就是说它最终可能会管理多个碎片。这有导致脂肪碎片的倾向。正如我在这里提出的问题when I started using them