我希望我的活动将相同的事件发送到多个片段。而不是让我的活动调用每个单独的片段方法:FragmentA.DoTask()
,FragmentB.DoTask()
,FragmentC.DoTask()
等...我宁愿让我的活动只发送一个事件,然后制作片段听这个事件。
在开发者文档中,他们使活动“监听”片段,然后活动调用片段的方法。是否可能反过来:让片段“听”活动。
由于
答案 0 :(得分:1)
您可以使用 EventBus 系统。
关于RRiBbit的说明(虽然这个与Android无关的库)确切地定义了它:
Eventbus是一种允许不同组件的机制 彼此沟通而不了解彼此。一个 组件可以向Eventbus发送事件,而不知道谁将会 拿起它或者有多少人会拿起它。组件也可以 在Eventbus上收听事件,而不知道是谁发送了事件。 这样,组件可以在不依赖于彼此的情况下进行通信。 此外,替换组件非常容易。只要是新的 组件了解正在发送和接收的事件, 其他组件永远不会知道。
那么这里的组件究竟是什么?好吧,一个组件可能是 任何东西。在大多数Eventbuses中,它们是Java对象。他们发送活动 他们也听取了活动。
在Android中,您可以使用EventBus。
答案 1 :(得分:0)
我认为没有办法绕过它。文档中的“听”一词更具隐喻性。您必须明确调用所有片段。
你可以得到的壁橱是在Activity类中维护一个Fragment列表。例如:创建一个自定义的Fragment类:
public class MyFragment extends Fragment{
public abstract void doTask();
}
让你的所有碎片继承自这个类。
public class FragmentA extends MyFragment{
@Override
public void doTask(){
//exec code here
}
}
在Activity类中,每次创建片段时,也要将其添加到List中。当事件发生时,调用所有碎片。
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();
}
}
}
注意:如果你没有那么多碎片,这个解决方案可能会有点过分。