我认为您可以使用 观察者模式,这在您的情况下是一种很好的做法。
如 GoF 所述:
“定义对象之间的一对多依赖关系,这样当一个对象改变状态时,它的所有依赖项都会得到通知并自动更新”。
阅读更多http://www.java2blog.com/2013/02/observer-design-pattern-in-java.html#TLio7G2ruqxvfZUR.99
在您的情况下,您有这样的关系(一对多),并且当活动中发生事件时,您想知道这两个片段。
Fragment 是实现观察者类,你的 Activity 具有主体的角色,如上图所示。
我希望这可以帮助您以一种非常好的方式实现您的代码。
一些教程可以在以下链接中找到:
https://dzone.com/articles/observer-pattern-java
http://www.tutorialspoint.com/design_pattern/observer_pattern.htm
编辑:在给定的情况下:
public interface OnReceiveListener { // this is your observer interface !
// This can be any number of events to be sent to the activity
void receivePreview(Object... obj);
}
片段在这种设计模式下的定义是正确的,所以我不会更改它们的代码:
public class OneFragment extends Fragment implements OnReceiveListener{
@Override
public void receivePreview(Object... obj) {
}
}
public class TwoFragment extends Fragment implements OnReceiveListener{
@Override
public void receivePreview(Object... obj) {
}
您需要引用活动中的片段(作为观察者)。
ArrayList< OnReceiveListener > observers = new ArrayList< OnReceiveListener>();
确实,观察者可以订阅或注册一个主题(片段持有对活动的引用(最好使用单例模式!:D)。像这样:
public class MainAct extends AppCompatActivity {
private static MainAct instance;
public static MainAct getInstance() {
if(instance != null)
return instance;
}
// I think it is better to create the instance variable in the onCreate() method of the MainAct activity
onCreate(...)
{
.
.
.
instance = this;
...
}
public void registerObserver(OnReceiveListener observer){
observers.add(observer)
}
/* To avoid memory leaks, remember to unregister receivers when no longer observing */
public void unregisterObserver(OnReceiveListener observer) {
observers.remove(observer);
}
notifyObservers(){
// call this method in the listener you want
for( Observer obser : observers)
obser. receivePreview(param )
}
...
//in fragment initialization:
MainAct.getInstance().registerObserver(this)