【问题标题】:Sending one event from one activity to multiple fragment将一个事件从一个活动发送到多个片段
【发布时间】:2012-05-30 17:47:00
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: android android-activity communication fragment


    【解决方案1】:

    您可以使用 EventBus 系统。

    RRiBbit 上的描述(尽管这个库与 Android 无关)对其进行了精确定义:

    Eventbus 是一种机制,允许不同的组件 在不了解对方的情况下互相交流。一个 组件可以在不知道谁来发送事件到事件总线 拿起它或有多少人会拿起它。组件也可以 在 Eventbus 上收听事件,而不知道是谁发送了事件。 这样,组件可以在不相互依赖的情况下进行通信。 此外,替换组件非常容易。只要新 组件了解正在发送和接收的事件, 其他组件永远不会知道。

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

    在 Android 中,您可以使用 EventBus。

    【讨论】:

      【解决方案2】:

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

      您可以获得的最重要的东西是在您的 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 类中,每次创建 Fragment 时,也将其添加到 List 中。当事件发生时,调用所有的 Fragments。

      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,则此解决方案可能有点矫枉过正。

      【讨论】:

      • 感谢您的回答。我遇到了一个问题(JavanullPointerexeption)。我认为这是因为我没有实例化接口。在 Developerpers Doc 上,他们在“onAttach”中实例化接口。在片段中可以,但我应该在 Activity 类中做什么? onAttach 在那里不存在。
      • @Jecimi 对不起,我误导了你。这是行不通的。等我回家再考虑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多