奥托事件没有解雇

时间:2015-08-23 09:14:34

标签: android otto

我有一个活动,它启动了一个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 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());

我已经检查了活动中的导入,并且我没有使用匕首模块,并且我没有使用任何其他事件总线。任何帮助都感激不尽。

这是我从活动中启动DialogFragment的方式....

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

4 个答案:

答案 0 :(得分:5)

问题是您未注册活动实例,您正在注册该课程:

  

BusStand.getInstance()寄存器(BudgetActivityNew.class);

您应该将代码更改为:

  

BusStand.getInstance()寄存器(这);

应该这样做。 :)

答案 1 :(得分:2)

在我的情况下,我在班级中导入了错误的库类。检查你的进口〜

对我来说,替换:

  mod_register:
     access_from: allow
     access: all

用这个:

import com.google.common.eventbus.Subscribe;

希望这有助于某人。

答案 2 :(得分:1)

感谢these家伙的答案.... AndroidAnnotations覆盖了@subscribe,所以我的subsrcibed事件从未被解雇,通过使用断点找到了......太糟糕了,我转移到了EventBus一切都工作得很好......这么多我很喜欢otto .......

答案 3 :(得分:-2)

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