2016-08-03 6 views
2

Im пытается передать данные между фрагментами и услугами по модернизации с использованием шины событий.Как сфокусировать модернизацию с шиной событий

Некоторые условия, которые могут сделать вещи немного сложнее:

  1. Fragment1 и FRAGMENT2 могут запросить идентичные данные таким образом только один запрос на сервер должен быть выполнен.
  2. Fragment1 и FRAGMENT2 может получить тот же тип данных с различными данными в нем (например, Fragment1 показывает данные пользователя, FRAGMENT2 показывает данные друга пользователя) .Это делает шины событие триггера как onUserResponse(User user) в Fragment1 и onUserFriendResponse(User userFriend) в FRAGMENT2

Мой нынешний подход - это обработка комментариев. Знаете ли вы какие-нибудь лучшие способы сделать это?

ответ

1

Без дополнительной информации, трудно знать достаточно, чтобы ответить в деталях.

  1. Вы можете кэшировать данные запроса, если уверены, что он не будет часто меняться. Класс обслуживания API (который делает ваши повторные доработки) может решить, нужно ли делать HTTP-запрос или просто обслуживать кэшированные данные. Этот кеш должен быть очищен, если есть вероятность, что данные изменились, например. при входе/выходе или выполнении некоторого запроса, который изменит данные.

  2. Для большинства систем шин событий (например, Otto, например), это не имеет значения, что называется метод ответа шины, а зависит от класса объекта параметра, который в вашем случае является User. Было бы довольно типично обертывать данные в объект события (как вы говорите, вы делаете), поэтому вы можете иметь onUserResponse(UserResponseEvent event) в Fragment1 и onUserFriendResponse(UserFriendResponseEvent event) в Fragment2. Каждый объект события просто переносит пользователя.

E.g.

public class UserResponseEvent { 
    private final User user; 

    public UserResponseEvent(User user) { 
     this.user = user; 
    } 

    public User getUser() { 
     return user; 
    } 
} 
2

Обертка - хорошее решение. Оберните свой класс User внутри двух разных классов Event, таких как UserEvent и UserFriendEvent. При этом различные события будут запущены, а один фрагмент не будет затронут другим событием.