我有一个扩展DialogFragment的片段,当其内容发生变化时需要通知其他对象。
android片段指南,指出执行此操作的最佳方法是要求包含活动实现指定的接口,然后将活动强制转换为该接口并调用该方法。
这确实有效,但它有一个限制,即只有包含活动可以监听更改。如果我希望能够通知任意对象,该怎么办?
我不能只是制作一个以侦听器为参数的方法,因为片段可能会被我背后的Android重新构建。而且我不能把监听器放在一个包中,因为我无法知道类实现监听器是否可以被持久化/序列化,而且我真的不会将所有监听器对象都复制。
我的片段既用于弹出窗口,也用作主视图中显示的普通片段
答案 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)
,列表中的所有听众都会做相应的工作。