Отто событие без стрельбы

У меня есть активность, и она запускает DialogFragment, по завершении события DialogFragment отправляет событие в шину событий Otto, это должно запустить метод в его родительской активности. Я разместил соответствующий код здесь, тот же код работает в другом месте моего приложения, но здесь событие просто не срабатывает.

Код в действии...

 @Subscribe
public void OttoUpdateUI(BudgetUpdateObject budgetUpdateObject)
{
    updateUI();
    Log.d("budget", "Otto updateUI called");
}

@Override
public void onResume() {
    super.onResume();
    BusStand.getInstance().register(BudgetActivityNew.class);
}

@Override
public void onPause() {
    super.onPause();
    BusStand.getInstance().unregister(BudgetActivityNew.class);
}

Класс BusStand....

public final class BusStand {
private static final Bus BUS = new Bus();

public static Bus getInstance() {
    return BUS;
}

private void BusProvider() {

    }
}

а стрельба...

BusStand.getInstance().post(new BudgetUpdateObject());

Я проверил импорт в действии, и я не использую модуль кинжала, и я не использую какую-либо другую шину событий. Любая помощь будет высоко ценится.

Вот как я запускаю DialogFragment из активности....

AddBudgetDialogFragment addBudgetDialogFragment = new AddBudgetDialogFragment();
addBudgetDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE,0);
addBudgetDialogFragment.show(getSupportFragmentManager(),"DialogFragment");

person Giridhar Karnik    schedule 23.08.2015    source источник
comment
Как запустить диалог? Может быть, вы pause занимаетесь этим? Если действие приостановлено, событие прибывает до вызова onResume   -  person lgvalle    schedule 23.08.2015
comment
Код выглядит нормально. Поделитесь активностью и кодом диалога.   -  person Noman Rafique    schedule 23.08.2015
comment
@Igvalle, позвольте мне написать несколько операторов журнала и посмотреть, в каком состоянии находится активность, когда событие запускается ...   -  person Giridhar Karnik    schedule 23.08.2015
comment
@Igvalle, я поместил операторы журнала в onResume(), onPause() и время запуска события .... Я уверен, что событие запускается только тогда, когда активность зарегистрирована ...   -  person Giridhar Karnik    schedule 23.08.2015


Ответы (4)


Проблема в том, что вы не регистрируете экземпляр Activity, вы регистрируете класс:

BusStand.getInstance().register(BudgetActivityNew.class);

Вы должны изменить код на:

BusStand.getInstance().register(this);

Это должно сработать. :)

person InvertedNetwork    schedule 10.09.2015

В моем случае я импортировал неправильный класс библиотеки в свой класс. Проверьте свой импорт~

Для меня замена:

import com.google.common.eventbus.Subscribe;

с этим:

import com.squareup.otto.Subscribe;

Надеюсь, это поможет кому-то.

person Jiyeh    schedule 17.02.2017

Нашел ответ благодаря этим ребята.... AndroidAnnotations переопределял @subscribe, поэтому мое событие subsrcibed никогда не запускалось, нашел это с помощью точек останова.... Жаль, я перешел на EventBus, и все работает нормально.... Такой жалко я так любила отто.....

person Giridhar Karnik    schedule 25.08.2015
comment
Уверены ли вы? AA переопределяет эти методы, потому что на самом деле Otto не может подписаться на него другим способом, поскольку вы используете подкласс, созданный AA, а не класс, который помечен `@Subscribe'. - person WonderCsabo; 03.09.2015

Вам необходимо зарегистрировать свой DialogFragment на Bus. Опубликуйте код для своего DialogFragment, чтобы я мог вам помочь.

person AndyRoid    schedule 23.08.2015
comment
Я думал, что нет необходимости регистрироваться, чтобы опубликовать событие. Я ошибаюсь? - person Giridhar Karnik; 23.08.2015
comment
В вашем вопросе говорится, что у меня есть активность, и она запускает DialogFragment, а затем DialogFragment отправляет событие в шину событий Otto. Поскольку DialogFragment, который является потомком Fragment, не зарегистрирован на шине, ваше событие не запускается. Попробуйте это в коде сами, напишите еще один пример класса Fragment и попробуйте запустить событие из него, даже если ваш Activity зарегистрирован. - person AndyRoid; 23.08.2015
comment
После двух дней надлежащих исследований я обнаружил, что нет необходимости регистрироваться, чтобы публиковать события на шине событий otto, независимо от того, используете ли вы фрагмент, диалоговый фрагмент, сервис или действие... - person Giridhar Karnik; 25.08.2015
comment
вам нужно зарегистрировать вещи на шине событий, чтобы получать события. Я написал около 3 уроков об Отто, кажется, вы впервые используете его. - person AndyRoid; 25.08.2015