我使用的是Otto EventBus。我有一个RecyclerViewAdapter,我在点击项目时使用Bus.post方法,问题是我有一个recylcer视图的片段不接受事件,所以当点击项目时我没有反应,我在Activity中注册Bus替换片段和Activity成功接受事件,但是片段 - 不,所以我可以为监听事件注册片段,还是应该使用回调?
BusProvider类:
public final class BusProvider {
private static final Bus BUS = new Bus();
public static Bus getInstance() {
return BUS;
}
private BusProvider(){}
}
ViewHolderOnClick代码
public void onClick(View v) {
transfers.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
BusProvider.getInstance().post(new OnButtonDeleteClickEvent(transfers.isEmpty(), id));
break;
}
片段订阅方法
@Subscribe
public void onButtonDeleteClick(OnButtonDeleteClickEvent event) {
db.deleteTransfer(event.getId());
if (event.isListEmpty()) {
setVisibility(false);
}
CustomToast toast = new CustomToast(getActivity(), getString(R.string.successfully_deleted));
toast.show();
}
我正在使用正确的@Subscribe,当我在活动中使用它时,事件有效
答案 0 :(得分:0)
确保调用事件总线的register
方法。请查看以下代码段以获取init并取消EventBus订阅。
我在创建View
时订阅EventBus,因为我只有在我的UI可见时才有兴趣收听消息/事件。所以我利用了onViewCreated
的{{1}}方法。
fragment
当UI不再可见时,不要忘记删除订阅。
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
EventBus.getDefault().register(this);
}