0

我希望我的活动将相同的事件发送到多个片段。而不是让我的活动调用每个单独的片段方法:FragmentA.DoTask()、、、FragmentB.DoTask()等等FragmentC.DoTask()......我宁愿让我的活动只发送一个事件,然后让片段监听这个事件。

在开发人员文档中,他们使活动“侦听”片段,然后活动调用片段的方法。是否有可能反过来:让片段“听”活动。

谢谢

4

2 回答 2

1

你可以使用EventBus系统。

RRiBbit上的描述(尽管这个库与 Android 无关)精确地定义了它:

Eventbus 是一种机制,它允许不同的组件在不知道彼此的情况下相互通信。组件可以向 Eventbus 发送事件,而无需知道谁会接收它或有多少其他人会接收它。组件还可以在 Eventbus 上监听事件,而无需知道是谁发送了事件。这样,组件可以在不相互依赖的情况下进行通信。此外,替换组件非常容易。只要新组件了解正在发送和接收的事件,其他组件就永远不会知道。

那么这里的组件到底是什么?好吧,组件可以是任何东西。在大多数 Eventbus 中,它们是 Java 对象。他们发送事件,他们也收听事件。

在 Android 中,您可以使用EventBus

于 2016-08-17T05:37:05.127 回答
0

我认为没有办法解决它。文档中的“听”这个词更具隐喻性。您必须显式调用所有片段。

您可以获得的最重要的东西是在您的 Activity 类中维护一个 Fragment 列表。eg:创建一个自定义的 Fragment 类:

public class MyFragment extends Fragment{
  public abstract void doTask();
}

让你的所有片段都继承自这个类。

public class FragmentA extends MyFragment{

  @Override
  public void doTask(){
    //exec code here

  }
}

在您的 Activity 类中,每次创建 Fragment 时,也将其添加到 List 中。当事件发生时,调用所有的 Fragment。

public class MyActivity extends Activity{
  List<myFragment> mFragmentList = new ArrayList<MyFragment>();

  public void addFragment(MyFragment fragment){
    mFragmentList.add(fragment);
  }

  public void onEvent(){
    for(MyFragment fragment:mFragmentList){
      fragment.doTask();
    }
  }

}

注意:如果您没有那么多 Fragment,则此解决方案可能有点矫枉过正。

于 2012-05-30T17:52:27.990 回答