我有一个活动,它启动了一个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");
答案 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
的代码,以便我帮助您。