奥托事件不开火

Otto event no firing

我有一个 activity 并且它启动一个 DialogFragment,在事件完成时 DialogFragment 在 Otto 事件总线上发布一个事件,这是为了在它的父 activity 中触发一个方法。我在这里发布了相关代码,相同的代码在我的应用程序的其他地方也有效,但这里的事件只是没有触发。

代码在 activity...

 @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);
}

公交车站class.....

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());

我已经检查了 activity 中的导入,我没有使用 dagger 模块,也没有使用任何其他事件总线。任何帮助都感激不尽。

这是我从 activity 启动 DialogFragment 的方式...

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

您需要在 Bus 上注册您的 DialogFragment。 Post 您 DialogFragment 的代码,以便我可以帮助您。

感谢 these 伙计们找到了答案....AndroidAnnotations 覆盖了@subscribe,所以我的订阅事件从未被触发,通过使用断点找到了这个....太糟糕了,我搬家了到EventBus,一切正常....真可惜我非常喜欢otto.....

问题是您没有注册 Activity 实例,您正在注册 class:

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

您应该将代码更改为:

BusStand.getInstance().register(this);

应该可以了。 :)

在我的例子中,我在 class 中导入了一个错误的库 class。检查你的导入~

对我来说,替换:

import com.google.common.eventbus.Subscribe;

有了这个:

import com.squareup.otto.Subscribe;

希望这对某人有所帮助。