我希望我的活动将相同的事件发送到多个片段。而不是让我的活动调用每个单独的片段方法:FragmentA.DoTask()
、、、FragmentB.DoTask()
等等FragmentC.DoTask()
......我宁愿让我的活动只发送一个事件,然后让片段监听这个事件。
在开发人员文档中,他们使活动“侦听”片段,然后活动调用片段的方法。是否有可能反过来:让片段“听”活动。
谢谢
我希望我的活动将相同的事件发送到多个片段。而不是让我的活动调用每个单独的片段方法:FragmentA.DoTask()
、、、FragmentB.DoTask()
等等FragmentC.DoTask()
......我宁愿让我的活动只发送一个事件,然后让片段监听这个事件。
在开发人员文档中,他们使活动“侦听”片段,然后活动调用片段的方法。是否有可能反过来:让片段“听”活动。
谢谢
你可以使用EventBus系统。
RRiBbit上的描述(尽管这个库与 Android 无关)精确地定义了它:
Eventbus 是一种机制,它允许不同的组件在不知道彼此的情况下相互通信。组件可以向 Eventbus 发送事件,而无需知道谁会接收它或有多少其他人会接收它。组件还可以在 Eventbus 上监听事件,而无需知道是谁发送了事件。这样,组件可以在不相互依赖的情况下进行通信。此外,替换组件非常容易。只要新组件了解正在发送和接收的事件,其他组件就永远不会知道。
那么这里的组件到底是什么?好吧,组件可以是任何东西。在大多数 Eventbus 中,它们是 Java 对象。他们发送事件,他们也收听事件。
在 Android 中,您可以使用EventBus。
我认为没有办法解决它。文档中的“听”这个词更具隐喻性。您必须显式调用所有片段。
您可以获得的最重要的东西是在您的 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,则此解决方案可能有点矫枉过正。