将一个事件从一个活动发送到多个片段

时间:2012-05-30 17:47:01

标签: android android-activity communication fragment

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

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

由于

2 个答案:

答案 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();
    }
  }

}

注意:如果你没有那么多碎片,这个解决方案可能会有点过分。