Отто переходит от Фрагмента к Деятельности

Я играю с Отто последние несколько дней, и это просто потрясающе. Однако я столкнулся с проблемой: я пытаюсь передать сообщение от фрагмента к действию. Чтобы все было просто, у меня есть одно действие, которое содержит фрагмент, а во фрагменте у меня есть кнопка, которая просто публикует мероприятие.

@Inject Bus bus;
...
...
bus.post(new ReadStatusEvent("23"));

В Activity у меня есть метод Subscribe.

@Subscribe
public void onReadStatusEvent(ReadStatusEvent event){
    Timber.i("sub:"+event.getReadStatusID());
}

Вот это событие

public class ReadStatusEvent {
  private final String readStatusID;

  public ReadStatusEvent(String readStatusID) { this.readStatusID = readStatusID; }

  public String getReadStatusID() { return readStatusID; }
}

Я использую Dagger, поэтому мой Otto Bus - это синглтон, который вводится файлом SimpleModule.

@Provides @Singleton
Bus provideBus() {
    return new Bus(ThreadEnforcer.ANY);
}

Я занимаюсь этим целый день, но по какой-то причине метод Subscribe никогда не вызывается.

Изменить: я только что попробовал использовать плагин Otto для Android Studio и всякий раз, когда я нажимаю @Subscribe или bus.post(..), он продолжает поиск, но ничего не находит (пока не найдено использования). Я думаю, что я делаю что-то ужасно неправильно где-то.


person Raza Gill    schedule 13.03.2014    source источник
comment
Плагин в настоящее время сломан, так что это не вы.   -  person Krylez    schedule 26.03.2014


Ответы (2)


Ваш намек на плагин Otto заставил меня задуматься о вашем импорте.

Вы уверены, что используете "com.squareup.otto.Subscribe", а не "com.google.common.eventbus.Subscribe" или любой другой пакет?

person Sebastian Engel    schedule 14.03.2014
comment
ФМЛ! Вы правы, я никогда не замечал импорта, просто изменил его, и теперь он работает безупречно. БОЛЬШОЕ СПАСИБО! - person Raza Gill; 14.03.2014

Чтобы получать события, экземпляр класса должен зарегистрироваться на шине. Регистрируете ли вы объекты, содержащие ваших подписчиков/продюсеров?

bus.register(this); // Example
person Tadej    schedule 13.03.2014
comment
Да, у меня это есть в onStart() Activity и Fragment. - person Raza Gill; 13.03.2014