Я думаю, что вы можете использовать шаблон наблюдателя, который является хорошей практикой в вашей ситуации.
Как описано GoF:
Определите зависимость «один ко многим» между объектами, чтобы при изменении состояния одного объекта все его зависимые объекты уведомлялись и обновлялись автоматически.
Подробнее читайте на http://www.java2blog.com/2013/02/observer-design-pattern-in-java.html#TLio7G2ruqxvfZUR.99
В вашей ситуации у вас есть такое отношение (один ко многим), и когда в действии произошло событие, вы хотите знать, что два фрагмента.
![введите здесь описание изображения](https://i.stack.imgur.com/G1DoM.png)
Фрагменты реализуют класс наблюдателя, и ваша активность играет роль субъекта, как показано на рисунке выше.
Я надеюсь, что это может помочь вам очень красиво реализовать свой код. некоторые учебники можно найти по следующим ссылкам:
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>();
действительно, наблюдатель может подписаться или зарегистрироваться в теме (фрагмент содержит ссылку на действие (лучше использовать шаблон singleton!: 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)
person
Sir1
schedule
27.05.2016