Я думаю, вы можете использовать Observer Pattern, который является хорошая практика в вашей ситуации.
Как описано GoF:
«Определить один-ко-многим зависимость между объектами так, что когда один объект изменяет состояние, все его иждивенцам нотифицированными и обновляются автоматически».
Подробнее на http://www.java2blog.com/2013/02/observer-design-pattern-in-java.html#TLio7G2ruqxvfZUR.99
В вашей ситуации вы имеете такое отношение (один-ко-многим), и когда произошло событие в деятельности вы хотите знать, что два фрагмента.
фрагменты реализации класса наблюдателя и ваша деятельность играет роль субъекта, как показывают в рисунке выше.
Надеюсь, это поможет вам реализовать свой код очень красиво. некоторый учебник можно найти в следующих ссылках:
https://dzone.com/articles/observer-pattern-java http://www.tutorialspoint.com/design_pattern/observer_pattern.htm
Edit: в данной ситуации:
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);
}
Фрагмента находятся в правильном определении с этим шаблоном, так что я не изменить их код:
открытый класс OneFragment extends Fragment реализует 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)
}
notifyObservers(){
// call this method in the listener you want
for(Observer obser : observers)
obser. receivePreview(param)
}
...
// в инициализация фрагмента:. MainAct.getInstance() registerObserver (это)
Можете ли вы объяснить немного более четко, чего именно вы хотите достичь? Кроме того, если вам нужен один интерфейс, зачем вы его реализуете в обоих фрагментах? –
Попробуйте библиотеку eventbus greenrobots http://www.andreas-schrade.de/2015/11/28/android-how-to-use-the-greenrobot-eventbus/ –