向片段添加侦听器的最佳方法是什么?

时间:2014-01-22 09:39:15

标签: android android-fragments

我有一个扩展DialogFragment的片段,当其内容发生变化时需要通知其他对象。

android片段指南,指出执行此操作的最佳方法是要求包含活动实现指定的接口,然后将活动强制转换为该接口并调用该方法。

这确实有效,但它有一个限制,即只有包含活动可以监听更改。如果我希望能够通知任意对象,该怎么办?

我不能只是制作一个以侦听器为参数的方法,因为片段可能会被我背后的Android重新构建。而且我不能把监听器放在一个包中,因为我无法知道类实现监听器是否可以被持久化/序列化,而且我真的不会将所有监听器对象都复制。

我的片段既用于弹出窗口,也用作主视图中显示的普通片段

3 个答案:

答案 0 :(得分:1)

你应该试试EventBus library。基本上,您可以从任何地方注册活动,并从任何地方发送活动。事件是普通的Pojos,可以包含任何变量或其他对象。 这使得活动,碎片等之间的整个沟通变得更加容易。

答案 1 :(得分:1)

备用事件总线解决方案是使用Square的Otto

或者您可以尝试LocalBroadcastManager

答案 2 :(得分:0)

Make和interface,它支持回调,例如:

interface IListener{  
    public void onEventRaised(object arguments);  
}

然后创建一个具有侦听器列表的静态类,并在引发事件时调用它们,例如:

    public static class AppListenerDispatcher{
        private static List<IListener> listeners; //make add and remove methods  

        public static void raiseMyEvent(object arguments){
           for (IListener listener: listeners)
             listener.onEventRaised(arguments);
        }
    }

现在您只需要在相应的类中实现此接口,该类将侦听此事件并将其添加到列表中。然后你可以在任何地方调用AppListenerDispatcher.raiseMyEvent(arguments),列表中的所有听众都会做相应的工作。